回溯
回溯和dfs关系密切
DFS基本思想:
- 本质是遍历决策树
- 关注路径、选择列表、结束条件
- 结合回溯:重点是撤销选择
1 | res = [] |
全排列
注意res.append(path[:]):是path的一个拷贝
1 | class Solution: |
注意,这里当
if depth==size:
时没有return
,虽然下面的for函数即使运行,也会因为seen[i]=1
,而不会对结果造成影响,但这是很不好的习惯最好在dfs结束时,加上
return
其实也可以用内置的permutations
函数:
1 | class Solution: |
电话号码的字母组合
选择列表为:dic[str(digits[depth])]
1 | class Solution: |
括号生成
当左括号不多于n时,可以添加左括号
当左括号数量大于右括号时,可以添加右括号
1 | class Solution: |
组合总和
since list is an unhashable type, we use Counter to remove duplication
1 | class Solution: |