首页 > 试题广场 >

全排列

[编程题]全排列
  • 热度指数:862 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

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

示例1

输入

[1,2,3]

输出

[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
function permute( nums ) {
    const res=[], path=[];
    const used = new Array(nums.length).fill(false);
    
    const dfs = () => {
        if(path.length == nums.length) {
            res.push(path.slice())
            return;
        }
    
        for(let i = 0; i < nums.length; i++){
            if(used[i]) continue;
            path.push(nums[i]);
            used[i] = true;
            dfs();
            path.pop();
            used[i] = false;
        } 
    }
    
    dfs();
    return res;
}
module.exports = {
    permute : permute
};
编辑于 2021-09-01 17:18:20 回复(0)
function permute( nums ) {
    let data = []
      if(nums && nums.length == 1) return [nums]
      for(let i = 0; i < nums.length;i++) {
        let arr = JSON.parse(JSON.stringify(nums))
        arr.splice(i,1)
        let info = this.permute(arr)
        info && info.length > 0 && info.forEach(item => {
            data.push([nums[i],...item])
        })
      }
      return data
}
发表于 2021-07-12 18:12:20 回复(0)
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param nums int整型一维数组 
# @return int整型二维数组
#
import copy
class Solution:
    res = []
    def permute(self , nums ):
        # write code here
        track = []
        self.backtrack(nums, track)
        return self.res
    def backtrack(self, nums, track):
        if len(track) == len(nums):
            self.res.append(copy.deepcopy(track))
            return
            
        for i in range(len(nums)):
            if nums[i] in track:
                continue
            # 做选择
            track.append(nums[i])
            # 进入下一层决策树
            self.backtrack(nums, track)
            # 取消选择
            track.pop()


发表于 2022-10-22 23:07:54 回复(0)
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @return int整型二维数组
 */
function permute( nums ) {
    // write code here
    var res=[];
    var used=[];
    var arr=[];
    dfs();
    return res;
    
    function dfs(){
        if(arr.length===nums.length){
            res.push([...arr]);
            return;
        }
        for(let i=0;i<nums.length;i++){
            if(used[i])continue;
            arr.push(nums[i]);
            used[i]=true;
            dfs();
            arr.pop();
            used[i]=false;
        }
    }
}
module.exports = {
    permute : permute
};

发表于 2021-10-04 22:23:40 回复(0)
const permute = (nums=> {
  const res=[]
  const userd={}
  function dfs(path){
    if(path.length==nums.length){
      res.push(path.slice())
      return 
    }
    for(let n of nums){
      if(userd[n]==true)continue
      path.push(n)
      userd[n]=true
      dfs(path)
      path.pop()
      userd[n]=false
    }
  }
  dfs([])
  return res
}
发表于 2021-09-30 10:51:55 回复(0)
回溯法实现全排列
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @return int整型二维数组
 */
function permute( nums ) {
    // write code here
    if(!nums) return [];
    let res = [];
    backtrack(nums, res, [], 0);
    function backtrack(nums, res, path, startIndex){
        if(path.length === nums.length){
            res.push([...path]);
            return;
        }else{
            for(let i = 0; i < nums.length; i++){
                if(path.includes(nums[i])) continue;
                path.push(nums[i]);
                backtrack(nums, res, path, startIndex + 1);
                path.pop();
            }
        }
    }
    return res;
}
module.exports = {
    permute : permute
};

发表于 2021-09-02 11:45:38 回复(0)
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param nums int整型一维数组
 * @return int整型二维数组
 */
function List(output,nums,level,path,used){
    if(level == nums.length ) {
        output.push(path.slice(0));
        return ;
    }
    for(let x in nums){
        if(used[x] != true){
            used[x] = true;
            path.push(nums[x]);
            List(output,nums,level+1,path,used);
            path.pop();
            used[x] = false;
        }
    }
}
function permute( nums ) {
    // write code here
    if (nums.length==0) return [];
    let level = 0;
    let path = [];
    let used = [];
    let output = [];
    List(output,nums,0,path,used);
    return output;
}
module.exports = {
    permute : permute
};

发表于 2021-08-13 21:57:39 回复(0)