思路
本题主要考的是回溯
result用来存储结果值,path表示每层遍历存放的值,每次递归的时候path中的结果都是结果值,所以每次递归的时候需要先把path中的内容存入result中,当startIndex === nums.length时,说明已经遍历完所有元素则结束递归
下面图中是所有的过程,以nums = [1,2,3]为例,图中pop()就是回溯的过程
实现
js
var subsets = function(nums) {
let result = [],path = [];
const backtracking = (nums,startIndex)=>{
result.push([...path])
if(nums.length === startIndex) return;
for(let i = startIndex;i < nums.length;i++){
path.push(nums[i])
backtracking(nums,i+1)
path.pop(); // 回溯
}
}
backtracking(nums,0)
return result;
};