注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
题目Leetcode 46 。 排列,数组无重复。代码如下,之前看了别人的刷题经验和总结,Swap然后DFS 来做,思路没问题。 我遇到问题是,如果用一个全局数组push 每次正确的结果,最后返回的永远是第一个排列结果。 比如 给予 【1 , 2, 3】 。result 会返回 【【1,2,3】,【1,2,3】,【1,2,3】,【1,2,3】,【1,2,3】,【1,2,3】】。 但是我去打印每次正确的结果却又是正确的。我实在没法理解,这里的代码有什么问题。之前刷过的题全都是这样用一个 外部result 结构输出结果,没有问题。。。大神们给回答下?
var result = []
var helper = function(nums , index){
if( index == nums.length - 1) {
// result.push(nums) 最终输出result 结果不正确 ,比如题目序列【1,2,3】 , 返回 一个【1,2,3】6次的结果集
console.log(nums) // 打印结果正确 , 正确依次输出各种排列
return
}
for(let i = index ; i < nums.length ; i++){
swap(nums, i , index)
helper(nums, index + 1)
swap(nums, i , index)
}
}
var swap = (nums , i , j) => {
let temp = nums[i]
nums[i] = nums[j]
nums[j] = temp
}
var permute = function(nums) {
helper(nums,0);
return result
};
console.log( permute([1,2,3,4]) )
|