78 Subsets
来源:互联网 发布:红苹果预算软件 编辑:程序博客网 时间:2024/04/30 08:30
题目链接:https://leetcode.com/problems/subsets/
题目:
Given a set of distinct integers, nums, 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 nums = [1,2,3], a solution is:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]
解题思路:
1、先把每一个数组元素都放到 subList 中,把 subList 加入到 List 中
2、遍历上一轮中加入到 List 中的那些 subList ,依次判断每个 subList 是否包含数组中的每一个元素,若不包含,就将其与 subList 中的元素合并为一个新的 subList。判断 List 是否包含该 subList,若不包含,则把该 subList 加入到 List 中。依次类推。当最新一轮创建的 subList 只有一个时,停止循环。
3、创建一个空 subList 加入到 List 中。
数组 [1, 2, 3]第一轮 List [[1],[2],[3]]第二轮 List [[1],[2],[3], [1,2],[1,3],[2,3]] (上一轮的subList) (新一轮产生的subList)例如:上一轮的[1]包含数组元素1,跳过此次循环;上一轮的[1]不包含数组元素2,创建新的 subList,将上一轮的 subList [1]添加到新的 subList, 再将元素2添加到新的 subList,得到[1,2]。最后检查 List 中是否有[1,2]这个元素,若没有则添加。第三轮 List [[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]] (上 一 轮)(新一轮)第四轮 List [[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3],[]]
注意:
判断 List 中是否包含 subList 时,需要将 subList 先进行排序(Collections.sort(subList, comparator))。
原因:List.contains(subList); 元素个数,大小,顺序完全一致的两个 subList 才是相同。即,若List中已有[1, 2],但 List.contains(subList); 认为没有包含[2, 1]。
public class Solution { public List<List<Integer>> subsets(int[] nums) { List<List<Integer>> list = new ArrayList(); int len = nums.length; for(int j = 0; j < len; j ++) { List<Integer> subList = new ArrayList(); subList.add(nums[j]); list.add(subList); } int start = 0; int end = list.size() - 1; while(end != start) { int n = 0; while(start <= end) { for(int j = 0; j < len; j ++) { if(list.get(start).contains(nums[j])) continue; List<Integer> subList = new ArrayList(); subList.addAll(list.get(start)); subList.add(nums[j]); Collections.sort(subList, new Comparator<Integer>() { public int compare(Integer a, Integer b) { return a.compareTo(b); } }); if(list.contains(subList)) continue; else { list.add(subList); n ++; } } start ++; } start = end + 1; end = end + n; } list.add(new ArrayList<Integer>()); return list; }}
10 / 10 test cases passed.Status: AcceptedRuntime: 460 ms
p.s. 效率偏低,算法有待优化!
大神思路参考:http://blog.csdn.net/linhuanmars/article/details/24286377
0 0
- 78 Subsets
- 78-Subsets
- 78 Subsets
- Leetcode 78 Subsets + 90 Subsets II 子集
- [LeetCode 78] Subsets && [LeetCode 90] Subsets II
- LeetCode 78: Subsets
- LeetCode 78 Subsets
- [leetcode 78] Subsets
- Leetcode NO.78 Subsets
- [LeetCode 78]Subsets
- leetcode-78 Subsets
- leetcode || 78、Subsets
- Subsets - LeetCode 78
- leetcode 78 :Subsets
- LeetCode(78) Subsets
- Leetcode #78 Subsets
- leetcode 78: Subsets
- [leetcode-78]subsets(java)
- 黑马程序员----JAVA基础----IO流_3及反射
- strspn函数和strbrk函数
- qt项目生成exe文件指南
- Cocos2d-x开发教程 第四节 深入Action
- 字符串拷贝和内存拷贝函数
- 78 Subsets
- J2EE常用的13个标准
- [MFC] MFC 字体设置
- c语言二维数组与指针
- (WPF)依赖属性
- python MySQLdb 常用实例
- java文件写入
- 面试题目思路及设计
- C++指针