从大佬那里学的https://zhuanlan.zhihu.com/p/93530380,再加上自己做题过程中的一些心得
模板伪代码(python看起来简洁一些)
1 | result = [] |
需要注意的几点:
- java中由于路径通常是引用类型,所以在加入结果集的时候往往需要new一下,以免路径改变时将res里面的元素也一起改变
- java/c++中,选择列表往往会通过一个index来代表到了哪个位置,而保持总列表nums的不变性,至于python和js,天生list就是可变的,append和remove并不会造成太大的开销,所以选择列表可以变而不需要index变量记录
- 总体框架不变,但是有时候for循环可以使用枚举代替(上下左右方向)
- 去重用Set,不要每次加入前判断list.contains,那样很慢
1 | private List<List<Integer>> res = new ArrayList<>(); //外面一个变量记录结果 |
毋庸赘言,直接结合回溯题目一起看,看几题就明白了