其实DFS不难,理解了递归就可以很容易的理解,但是递归是入门的难度不算低,很容易被劝退
这个代码针对的是最简单的DFS题目,比如:
给定n个数字,从中选取n个按字典序进行排列
例子:
输入:123
输出:123 132 213 231 312 321
贴代码
1 |
|
可能上面的注释很容易绕晕,我在这里手打一次过程
举个例子
比如我们要123这3个数的排列方式
当前位数:第一位
选择1并填入
现在就变成了1 - -
位数不满3位,继续下一层
当前位数:第二位
选择1,但已被使用,选择2并填入
1 2 -
位数不满3位,继续下一层
当前位数:第三位
选择1,2都被使用,填入3
1 2 3
位数满足,输出
重点:
输出完毕,退出当前位数,变为1 2 -,将3取消使用标记
当前位数:第二位
选择3并填入
1 3 -
位数不满,继续下一层
当前位数:第三位
选择1被使用,填入2
1 3 2
满足,输出,退出当前层,变为1 3 -,将2取消标记
第二层由于选择到了3,没有其他选择,故return 0退出
依此类推,人手模拟起来很简单,但是代码实现要注意很多细节
就这样吧,可能有点繁琐,如果实在论懒得想的话过几天也行就想通了,我就是这么突然想通的
对于一个刚入坑半年的萌新(还有数学56分orz)来说,有点难度,继续加油吧