-
Notifications
You must be signed in to change notification settings - Fork 46
Open
Description
/**
* @param {number[]} nums
* @return {number[][]}
*/
var permute = function(nums) {
if(nums.length===0) return [];
var used = {};
var res = [];
function combine(nums,index,s){
if(index === nums.length){
res.push([...s]);
return;
}
for(var i=0;i<nums.length;i++){
if(!used[i]){
s.push(nums[i]);
used[i]= true;
combine(nums,index+1,s);
s.pop(); // 恢复现场
used[i]=false; // 恢复现场
}
}
return;
}
combine(nums,0,[]);
return res;
};
解题思路
用res记录收集的结果。用s记录深度遍历时捡到的值。一旦达到叶子节点的时候,就把捡到的值放到res中。然后回溯。 这里需要注意的是,在深度遍历的过程中,已遍历的数字,不要再参与遍历了。所以需要有一个字段来记录一下在之前的路径中是否已经使用过某个数字。而且在回溯的过程中。s数组需要恢复原状。
LeetCode原题地址:https://leetcode-cn.com/problems/permutations/description/

