力扣78. 子集
阿新 • • 發佈:2020-12-14
技術標籤:leetcode
class Solution {
public List<List<Integer>> subsets(int[] nums) {
LinkedList<List<Integer>> result = new LinkedList<List<Integer>>();
if(nums.length == 0 || nums == null) return result;
subsetHelper(nums, 0, result, new LinkedList <Integer>());
return result;
}
public void subsetHelper(int[] nums, int currIdx, List<List<Integer>> result, List<Integer> curr){
result.add(new LinkedList<Integer>(curr));
for(int idx = currIdx; idx < nums.length; idx++){//for迴圈是為了遍歷集合初始值
curr.add(nums[idx]);
subsetHelper(nums, idx+1, result, curr);//1,12,123
curr.remove(curr.size() - 1);//移除2,不要想到遞迴裡面去了,因為遞迴裡面也會curr.size() - 1
}
}
}
歸納:
遞迴+回溯,太難了
比如[1, 2, 3],輸出順序是1,12,123(這個時候套了兩層遞迴),12,1(所以要remove兩次),13