leetcode 78. 子集(Subsets) beat 100%
阿新 • • 發佈:2018-12-10
給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集(冪集)。
說明:解集不能包含重複的子集。
示例:
輸入: nums = [1,2,3] 輸出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
思路:
這是一道很不錯的回溯題,他和全排列一樣,能很好的幫助你理解回溯
這裡一定要注意的一個地方 ans.add(new ArrayList<>(list));
一定要new一個新的陣列。否則他們都指向同一個list 答案就是錯誤的了
每次進入函式前,放入一次陣列,即可儲存所有的情況了
class Solution { public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> ans = new ArrayList<>(); List<Integer> list = new ArrayList<>(); dfs(nums, 0, list, ans); return ans; } public void dfs(int[] nums, int m, List<Integer> list, List<List<Integer>> ans) { ans.add(new ArrayList<>(list)); for(int i=m;i<nums.length;i++) { list.add(nums[i]); dfs(nums,i+1,list,ans); list.remove(list.size()-1); } } }