全排列
Last updated
Last updated
问题简述
思路 1
递归+回溯模板:
把递归过程看作一棵树的生成过程,考虑两个关键问题:
每个节点需要产生哪些分支;
何时结束一条路径上的递归(递归基);
本题中,
对第一个问题:每个节点产生的分支由在这条路径上未使用过的数字决定;因此可以使用一个全局变量记录已经用过的数字,遍历时跳过这些数字即可;
路径上的每个节点代表一次递归的深入,所以需要使用全局变量来记录(或者把变量作为参数传递到下一层),这个过程可以看作是一次纵向剪枝;
如果是横向剪枝,则可以使用一个局部变量来记录(相关问题:全排列 II);
对第二个问题:使用一个变量记录当前的递归深度(最简单);或者判断全局变量中每个数字都使用过;
思路 2:下一个排列
先排序,然后判断是否存在下一个排列,进而得到全部排列;
代码略;
相关问题