这题是本文的三周以前做的,也算是一题很常见的题目。
原题地址: https://leetcode-cn.com/problems/subsets/
题目描述:
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subsets
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
这道题目其实有很多种解决思路,我的思路是这样的:
遍历每个元素,然后再遍历当前所有的子集,为每个子集都添加上当前元素即可。
假设输入为[1,2,3]。那么第一次遍历,元素为1,当前子集为一个空列表,那么在此基础上为空集合新增元素1,当前子集就变成了[]和[1]。
第二次遍历元素[2],再在此基础上为每个子集都添加元素2,子集就变成了[],[1],[2],[1,2]。
最后遍历元素[3],子集最终成为[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]。
中文官网题解:
https://leetcode-cn.com/problems/subsets/solution/
个人题解:
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> list = new LinkedList<>();
list.add(Collections.emptyList());
if (nums.length == 0) {
return list;
}
for (int i : nums) {
List<List<Integer>> tList = new LinkedList<>();
for (List<Integer> l : list) {
List<Integer> tmp = new ArrayList<>(l);
tmp.add(i);
tList.add(tmp);
}
list.addAll(tList);
}
return list;
}
结果:
这题依然是一个正常水平的发挥,差不多一半的水平,依然保持稳定的效率....