目录
前言
我们之前看到的全排列问题的解法都是通过交换法达到的,去重的效果也是通过判断当前元素前是否有相同元素来实现,今天我们带来一个全新的思路,使我们直接进行深度优先搜索+一个计数器就可以实现,不用交换。
1,普通DFS实现1~n的元素全排列
我们先一步一步来,先从1~n不重复的开始:
假如说我们现在的n是3,则有以下排列组合:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
仔细观察思考一下,我们列举这些排列组合的时候,是不是我们先固定了一个数字为基准,之后把剩下的数字进行全排列呢?那再继续往下说,我们在把剩下的数字全排列的时候,是不是也会跟前面一样,以一个数字为基准呢?我们推理一下:
第一次:
固定 1
1 ? ? 在2 3里面选
固定2
1 2 ? 在3里面选
固定3
1 2 3 排列出来了
以此类推,我们发现这样刚好适合使用递归和回溯算法来实现,我们在排列出来之后跳出递归,之后进行回溯,位数作为我们的参数&#