46.全排列

const arr = [1, 2, 3, 4]
const p = []
const res = []
const visited = new Array(arr.length).fill(false)
const f = (depth) => {
    if (depth.length === arr.length) {
        res.push([...depth])
        // console.log('res:', res)
        return
    }
    for (let i = 0; i < arr.length; i++) {
        if (!visited[i]) {
            depth.push(arr[i])
            visited[i] = true
            f(depth)
            depth.pop()
            visited[i] = false
        }
    }    
}

f(p)
console.log(res)

这个问题相当之经典,至少对于我而言是的,而且个人觉得,也很有用,尤其是在做游戏方面。试想一下,给定一组数据,通过该算法可以获得所有基于该数组的排列组合,此时,再配上一个随机函数,感受到数学的魅力了吗?这个算法可以很好地处理次序未知的问题,特指确认一组人而不是单个的顺序问题。

该算法也是我认为,有用的算法题之一。

posted on 2021-09-09 11:30  hhvfg  阅读(51)  评论(0)    收藏  举报