Leetcode 题解 - 搜索--Backtracking(19):子集合
2019-05-28 11:33
387 查看
[LeetCode] Subsets 子集合
Given a set of distinct integers, S, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
For example,
If S =
[1,2,3], a solution is:
[code][ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
解题思路:
这道题目拿到手第一想法就是利用DFS,与以往不同的是子集的大小是从0到3,这个点需要额外注意,本初就是在主函数中构造一个for循环来解决这个问题,剩下的就是整张的dfs算法。当然我在此处天添加了visited 和 start,就我个人的经验来说,我认为i这种集合顺序性存在的题目,怎么说呢 就是 12345567 用第一个再用第二个再用第三个的 用start明显好一些。
[code]class Solution { public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> subset = new ArrayList<>(); List<Integer> subsetList = new ArrayList<>(); boolean[] visited = new boolean[nums.length]; for(int i=0; i <= nums.length; i++) help(subset, subsetList, visited, 0, i, nums); return subset; } private void help(List<List<Integer>> subset, List<Integer> subsetList, boolean[] visited, int start, final int size, final int[] nums){ if(subsetList.size() == size){ subset.add(new ArrayList<>(subsetList)); return; } for(int i = start; i < nums.length; i++){ subsetList.add(nums[i]); help(subset, subsetList, visited, i + 1, size, nums); subsetList.remove(subsetList.size() - 1); } } }
[code]class Solution { public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> result = new ArrayList<>(); List<Integer> list = new ArrayList<>(); result.add(new ArrayList()); boolean[] visited = new boolean[nums.length]; help(list, result, nums, 0, visited); return result; } private void help(List<Integer> list, List<List<Integer>> result, int[] nums, int start, boolean[] visited){ for(int i = start; i < nums.length; i++){ visited[i] = true; list.add(nums[i]); if(list.size() <= nums.length) result.add(new ArrayList(list)); help(list, result, nums, i+1, visited); list.remove(list.size() - 1); } } }
相关文章推荐
- Leetcode 题解 - 搜索--Backtracking(21):分割字符串使得每个部分都是回文数
- Leetcode 题解 - 搜索--Backtracking(20):含有相同元素求子集
- LeetCode题解(19)--Remove Nth Node From End of List
- 【LeetCode题解】19_删除链表的倒数第N个节点(Remove-Nth-Node-From-End-of-List)
- LeetCode题解(python)-19. 删除链表的倒数第N个节点
- leetcode 19 题解 翻译 Python版
- Leetcode 079 搜索单词 Python C++ 史上最详细题解系列
- LeetCode 19之Remove Nth Node From End of List的Java题解(三种解法)
- Leetcode题解 19. Remove Nth Node From End of List
- leetcode题解(十):19. Remove Nth Node From End of List
- Leetcode 81 搜索旋转排序数组 II Python C++ 史上最详细题解系列
- leetcode题解-328. Odd Even Linked List && 19. Remove Nth Node From End of List
- 【leetcode题解】【E】【19】299. Bulls and Cows
- LeetCodet题解--17. Letter Combinations of a Phone Number(所有数字键盘组合所对应的所有字符集合)
- leetcode题解-19. Remove Nth Node From End of List
- LeetCodet题解--19. Remove Nth Node From End of List(删除链表的倒数第n个元素)
- [LeetCode]题解(python):015-3Sum
- LeetCode题解——Counting Bits
- LeetCode题解——Palindrome Pairs
- LeetCode(88)题解-- Merge Sorted Array