中文题目
给定一个整数数组 nums
,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
示例 1:
输入:nums = [1,2,3] 输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
示例 2:
输入:nums = [0] 输出:[[],[0]]
提示:
1 <= nums.length <= 10
-10 <= nums[i] <= 10
nums
中的所有元素 互不相同
注意:本题与主站 78 题相同: https://leetcode-cn.com/problems/subsets/
通过代码
高赞题解
二进制枚举(更多的时候我们叫其为状态压缩
)是在一些题目中常见的技巧,例如本体中,nums.length <= 10
,所以我们可以用10个bit来表示每个下标的元素取或者不取,而Java中的int有32位,所以足够我们来进行状态枚举了。
class Solution {
public static List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
// i 就是枚举的状态,取值范围[0, 2^nums.length)
for (int i = 0; i < Math.pow(2, nums.length); i++) {
List<Integer> subRes = new ArrayList<>();
for (int j = 0; j < nums.length; j++) {
if ((i & (1 << j)) > 0) {
subRes.add(nums[j]);
}
}
res.add(subRes);
}
return res;
}
}
统计信息
通过次数 | 提交次数 | AC比率 |
---|---|---|
4548 | 5350 | 85.0% |
提交历史
提交时间 | 提交结果 | 执行时间 | 内存消耗 | 语言 |
---|