LeetCode 090 Subsets II
2015-10-25 10:46
495 查看
题目描述
Given a collection of integers that might contain duplicates, 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,2], a solution is:
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
分析
使用二进制,不需要递归。对于二进制中的每一位,0表示不选择,1表示选择。则有2^n种情况。使用HashSet,能够直接过滤重复情况(先对数组排序,题目中也要求每个list非降序排列)。
代码
[code] public static List<List<Integer>> subsetsWithDup(int[] nums) { if (nums == null) { return null; } if (nums.length == 0) { return new ArrayList<List<Integer>>(); } Set<List<Integer>> set = new HashSet<List<Integer>>(); // 题目中要求每个list是非降序,所以要先从小到大排序 Arrays.sort(nums); // 对于n位,有2^n种情况 for (int i = 0; i < Math.pow(2, nums.length); i++) { List<Integer> list = new ArrayList<Integer>(); int tmp = i; // 对于每种情况,分别求得二进制中1的个数 // 0代表不选择,1代表选择 for (int j = 0; j < nums.length; j++) { int bit = tmp & 1; tmp >>= 1; if (bit == 1) { list.add(nums[j]); } } set.add(list); } return new ArrayList<List<Integer>>(set); }
相关文章推荐
- *杭电1014——Uniform Generator(数学题)
- android图片压缩总结
- Java调用.NET 的Web Service服务故障排除
- GIS学习笔记之地理配准
- 1013. 数素数 (20)
- 基于lucene的java开发环境配置
- 洛谷1828 香甜的黄油
- 【编译原理】概述总结(一)
- Codeforces 2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest D题(计算几何+判断线段相交)
- 折半排序
- Gson解析原理概述
- web网站设计-frameset与iframe框架的使用
- Android之完成SQLite数据库版本更新的过程熟悉
- LightOj 1148 Basic Math
- QTableWidget的使用和美工总结
- 夺命雷公狗jquery---11属性操作
- bzoj3943: [Usaco2015 Feb]SuperBull
- 插入排序
- HttpClient使用详解
- 201510250817_《Javascript权威指南(第六版)——属性描述符、模块、命名空间对象、私有空间命名的函数》(P244-252)