LeetCode 78. 子集

本文介绍了一种使用穷举法生成所有可能子集的方法。通过将数组元素映射为二进制数的每一位,利用二进制数的每一位是否为1来决定是否选择该元素,从而生成2^n个子集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整体思路就是穷举法,假设初始nums中有n个元素,n位二进制数每位可以赋值1或者0 ,全部结果为2^n。
为了保证2进制数的位数一致,从2n 到 2n+1 算,再截取到第一位。

public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> result = new ArrayList();
        int n = nums.length;
        for (int i = (int)Math.pow(2, n); i < (int)Math.pow(2, n + 1); ++i) {
            List<Integer> list = new ArrayList();
            String bitmask = Integer.toBinaryString(i).substring(1);
            for(int j=0;j<bitmask.length();j++){
                if(bitmask.charAt(j)=='1'){
                    list.add(nums[j]);
                }
            }
            result.add(list);
        }
        return result;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值