原题
https://leetcode-cn.com/problems/subsets/
解题思路
看到 「子集」、「组合」这样的词语,首先想到回溯算法。
全排列:N!
组合:N!
子集:2^N ,每个元素都可能存在或不存在。
代码
/**
* @param {number[]} nums
* @return {number[][]}
*/
var subsets = function(nums) {
const n = nums.length;
const result = [];
if (nums.length < 1) return [[]];
const backTrace = (arr, currentIndex) => {
result.push(arr);
if (currentIndex >= n) return;
for (let i = currentIndex; i < n; ++i) {
arr.push(nums[i]);
backTrace(arr.slice(), i+1);
arr.pop();
}
}
backTrace([], 0);
return result;
};
复杂度
- 时间复杂度 O(N*2^N)
- 空间复杂度 O(2*N)

京公网安备 11010502036488号