Live2d

算法之力扣习题练习

题目描述:

给定一个 没有重复 数字的序列,返回其所有可能的全排列。

示例:

输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]

 

思路:

回溯算法,遇到合适的放入数组,遇到不合适的就继续

result = []
def backtrack(路径, 选择列表):
    if 满足结束条件:
        result.add(路径)
        return
    
    for 选择 in 选择列表:
        做选择
        backtrack(路径, 选择列表)
        撤销选择  

部分代码:

javascript:
var permute = function(nums) {
    var res = []
    var backtrack = function(nums,track){
        if(nums.length === track.length){     //递归终止条件,如果track数组长度和比较数组nums长度一致则表示找到结果之一,递归结束,输出数组
            res.push(track.slice())
            return
        }
        for(var i=0;i<nums.length;i++){
            if(track.indexOf(nums[i])>-1){  //若是track数组中存在与nums[i]一样的数则结束该次循环
                continue
            }
            track.push(nums[i])  //在nums中找到track没有的数时压入track数组中
            backtrack(nums,track)  //递归调用
            track.pop()
        }
    
    }
     backtrack(nums,[])
     return res
};
 
posted @ 2021-04-08 11:54  IkNyEa  阅读(82)  评论(0)    收藏  举报