实现一个有限集合数组全排列

840 阅读1分钟

记某次面试所遇到的一题——实现全排列

首先看到这一题,我们想到的是经典算法回溯深度优先的思想

例如

给定数组[1,2,3],求他的全排

例图

image.png

解析

  1. 从数组中取出第一个元素,那么在下面排的话是出了本身之外的其他元素
  2. 一直往下排,直到取完数组里面的所有元素
  3. 取完所有元素,回溯到最初的除了本身以外的任意元素
  4. 实现全排列

代码

const permute  = function(nums){
    let res = [];
    dfs([]);
    function dfs(path){
        if(path.length === nums.length){
            res.push([...path]);
            return 
        }
        for(let i = 0;i<nums.length;i++){
            if(path.includes(nums[i])){
                continue;
            }
            path.push(nums[i]);
            dfs(path)
            path.pop()
        }

    }
    return rsz;
}

再来一题

给定数组:[["a","b"],["m","n"],["0","1"]]

输出:["am0","am1","an0","an1","bm0","bm1","bn0","bn1"]