记录力扣上面的一道题,在力扣上看见这个解法,抄下来学习一下。
幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
代码如下:
var subsets = function (nums) {
let arr = [[]];// 添加空数组
for (let i = 0; i < nums.length; i++) {// 控制循环次数
let len = arr.length;// 获取arr的长度
for (let j = 0; j < len; j++) {
arr.push(arr[j].concat(nums[i]));
}
}
return arr;
};
以nums = [1,2,3]为例,进行说明:
i | 初始arr | len | j | arr[j] | num[i] | 添加的arr[j].concat(nums[i]) | 结束时arr |
---|---|---|---|---|---|---|---|
i=0 | [[]] | 1 | 0 | [] | 1 | [1] | [[],[1]] |
i=1 | [[],[1]] | 2 | 0 | [] | 2 | [2] | [[],[1],[2]] |
[[],[1],[2]] | 1 | [1] | 2 | [1,2] | [[],[1],[2],[1,2]] | ||
i=2 | [[],[1],[2],[1,2]] | 4 | 0 | [] | 3 | [3] | [[],[1],[2],[1,2],[3]] |
[[],[1],[2],[1,2],[3]] | 1 | [1] | 3 | [1,3] | [[],[1],[2],[1,2],[3],[1,3]] | ||
[[],[1],[2],[1,2],[3],[1,3]] | 2 | [2] | 3 | [2,3] | [[],[1],[2],[1,2],[3],[1,3],[2,3]] | ||
[[],[1],[2],[1,2],[3],[1,3],[2,3]] | 3 | [1,2] | 3 | [1,2,3] | [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3] |