Subsets位运算版
来源:互联网 发布:淘宝商城男装休闲t恤 编辑:程序博客网 时间:2024/06/05 11:15
题目描述:
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.
(给定一组不同的整数S,返回所有可能的子集。
注:
子集中的元素必须是非降序的。
解决方案集不得包含重复子集。)
For example,
If S = [1,2,3], a solution is:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
思路:将数组看为一个二进制串,1表示有这个数,而0表示没有,例如101意思就是[1,3],111表示[1,2,3],010表示[2],
而该数组的所有子集则是从000到111一共2^array.length种,遍历这些二进制串,将每个二进制串中的1找出,并且
将其对应数组中的数放入结果集即可。
public class Subsets {public static List<List<Integer>> subsets(int[] S){List<List<Integer>> result = new ArrayList();int total = 1 << S.length;//i就是000到111十进制表达for(int i=0;i<total;i++){List<Integer> list = new ArrayList<Integer>();int index = S.length-1;int mid = i;while(mid>0){//判断i的二进制表达每位是否为1if((mid&1)==1){list.add(S[index]);}index--;mid >>= 1;}result.add(list);}return result;}public static void main(String[] args) {int array[]={1,2,3};List<List<Integer>> result=subsets(array);for(int i=0;i<result.size();i++){for(int j=0;j<result.get(i).size();j++){System.out.print(result.get(i).get(j)+" ");}System.out.println("\n");}}}
本题还有一种回溯法Subsets可以参考一下.位运算操作可以参考程序中位运算的妙用。
阅读全文
1 0
- Subsets位运算版
- 使用位运算解决subsets
- 78. Subsets ,90. Subsets II(待研究)---位运算法(重要和Combination Sum一系列的题目类似)
- n皇后 - 位运算版
- N皇后位运算版
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 系统启动时在bus系统中注册platform总线
- 前缀式计算
- POJ4072多点共线问题
- Ajax
- Python中的格式化字符串
- Subsets位运算版
- hdu2553 n皇后问题
- C++ STL 简陋笔记
- Error:Conflict with dependency 'com.google.code.findbugs:jsr305'
- Eclipse中JS代码提示功能
- 数据结构与算法 基础概述 入门必备!
- 数据结构--FP Tree
- Linux单网卡多IP配置
- 安装Linux后首次输入ifconfig后IP地址显示为127.0.0.1