二刷hot100-78.子集
回溯算法,和全排列类似,不同的是,用一个指针取代了used数组;
终止条件:当指针=数组长度,返回
遍历过程中,初始值为传入的指针,还是先将当前数组元素加入path,进入递归,不同的是传入的指针值加1,递归回来实现回溯,path删除元素;
class Solution { List<List<Integer>> res = new ArrayList<>(); List<Integer> path = new ArrayList<>(); public List<List<Integer>> subsets(int[] nums) { f(nums,0); return res; } public void f(int[] nums,int index){ res.add(new ArrayList<>(path)); if(index == nums.length){ return; } for(int i = index;i < nums.length;i++){ path.add(nums[i]); f(nums,i + 1); path.remove(path.size() - 1); } } }