当前位置:网站首页>剑指 Offer II 079. 所有子集

剑指 Offer II 079. 所有子集

2022-06-11 01:46:00 彼淇梁

剑指 Offer II 079. 所有子集【中等题】

思路:

【迭代】【二进制枚举】

与主站78题相同 78. 子集

代码:

class Solution {
    
    public List<List<Integer>> subsets(int[] nums) {
    
        //存储所有子集
        List<List<Integer>> ans = new ArrayList<>();
        //存储当前mask表示的子集
        List<Integer> list = new ArrayList<>();
        int n = nums.length;
        //定义一个int类型变量mask,通过其二进制形式 表示 nums 中元素的取舍情况,进而表示 当前 mask 对应的子集
        for (int mask = 0; mask < (1 << n); mask++) {
    
            //首先对list进行清空,提高变量的复用性
            list.clear();
            //遍历nums数组,如果当前mask从右往左数第i位值为1,说明在nums数组中下标为i的元素被选中,将其添加到list集合中
            for (int i = 0; i < n; i++) {
    
                if ((mask & (1 << i)) != 0){
    
                    list.add(nums[i]);
                }
            }
            //将当前mask表示的子集添加到ans中
            ans.add(new ArrayList<>(list));
        }
        //所有可能的mask均被遍历完之后,得到的ans即为nums数组的所有子集
        return ans;
    }
}
原网站

版权声明
本文为[彼淇梁]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_42593011/article/details/125228697