咸糖记录编程的地方

念念不忘,必有回响。

目录
数据结构 5.位运算
/  

数据结构 5.位运算 有更新!

78. Subsets

Given a set of distinct integers, nums, return all possible subsets (the power set).Note: The solution set must not contain duplicate subsets.Example:


Input: nums = [1,2,3]
Output:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

这种解法是 CareerCup 书上给的一种解法,想法也比较巧妙,把数组中所有的数分配一个状态,true 表示这个数在子集中出现,false 表示在子集中不出现,那么对于一个长度为n的数组,每个数字都有出现与不出现两种情况,所以共有 2n 中情况,那么我们把每种情况都转换出来就是子集了,我们还是用题目中的例子, [1 2 3] 这个数组共有8个子集,每个子集的序号的二进制表示,把是1的位对应原数组中的数字取出来就是一个子集,八种情况都取出来就是所有的子集了,参见代码如下

class Solution {
    public List<List<Integer>> subsets(int[] nums) {
        int n = nums.length;
        List<List<Integer>> res = new ArrayList<>();
        for(int s=0;s< 1<<n;s++){
            List<Integer> cur = new ArrayList<>();
            for(int i=0;i<n;i++){
                if((s & (1 << i))>0){
                    cur.add(nums[i]);
                }
            }
            res.add(cur);
            
        }
        
        return res;
    }
}

标题:数据结构 5.位运算
作者:xiantang
地址:http://xiantang.info/articles/2019/06/03/1559551228894.html

评论