1. 程式人生 > 其它 >力扣78. 子集

力扣78. 子集

技術標籤: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