一、题目描述
======
给你一个整数数组
nums
,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
示例1 输入:nums = [1,2,3] 输出:
[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
示例2 输入:nums = [0] 输出:
[[],[0]]
二、思路分析
======
List<Integer> t = new ArrayList<Integer>();
List<List<Integer>> ans = new ArrayList<List<Integer>>();
public List<List<Integer>> subsets2(int[] nums) {
diguiWithLenght(0, nums);
return ans;
}
public void diguiWithLenght(int cur, int[] nums) {
if (cur == nums.length) {
ans.add(new ArrayList<Integer>(t));
return;
}
t.add(nums[cur]);
diguiWithLenght(cur + 1, nums);
t.remove(t.size() - 1);
diguiWithLenght(cur + 1, nums);
}
滚雪球
[1,2,3]
进行逐个遍历将里面的元素单个逐个添加到新的复制数组中,这样说可能有点抽象下面我们通过一幅图理解下三、AC 代码
=======
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> resultList = new ArrayList<>();
resultList.add(new ArrayList<>());
for (int num : nums) {
int length = resultList.size();
for (int i = 0; i < length; i++) {
List<Integer> subResult = resultList.get(i);
List<Integer> temList = new ArrayList<>();
temList.addAll(subResult);
temList.add(num);
resultList.add(temList);
}
}
return resultList;
}
四、总结
====
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。