17. Letter Combinations of a Phone Number
1 | class Solution { |
关于string 的默认初始化
79. Word Search
1 | class Solution { |
如果状态是整个棋盘,那么一定要恢复现场
如果状态是棋盘中的某一个格子,就不需要恢复现场
46. Permutations
1 | class Solution { //方法一: 枚举每个位置可以放哪些数字 |
47. Permutations II
1 | class Solution { //方法二: 枚举每个数可以放到哪个位置上 |
枚举每个数放到哪个位置上
将相同的数放在一起 sort
78. Subsets
1 | class Solution { |
判断 i的二进制表示的第j位是否为1
i >> j & 1 j从0开始计数,即 二进制数最右边是第0位
位运算是o(1)的
90. Subsets II
1 | class Solution { |
举个例子:
- [1, 2, 3, 4, 5]
1 : 0 , 1 元素1可以选择不放 或者 放
2 : 0 , 1
3 : 0 , 1
4 : 0 , 1
5 : 0 , 1
- [1, 1, 2, 2, 2]
1 : 0, 1, 2 元素1可以选择不放, 放一个, 放两个…
2 : 0, 1, 2, 3
216. Combination Sum III
1 |
依次枚举每个数从哪个位置上选
举个例子:
从1 2 3 4中选三个数,
第一个数可以从
1
1
2
3
4
这几个位置上选
第二个数就要从剩下的数里选了
- 2, 3, 4
- 1, 3, 4
…
dfs(当前枚举到了第几个数字, 开始枚举的位置, 当前选择的所有数的和)
52. N-Queens II
1 | class Solution { |
依次枚举每一行皇后的位置(每一行只有一个皇后)
- 每一列只能有一个皇后 col[N]
- 每条斜线上只能有一个皇后 d[2 * N - 1], ud[2 * N - 1]
需要判断每一个坐标(x, y)在哪一条斜线上
x + y
x - y + n //因为ud[]索引非负,而x - y 可能为负, 所以这里要加上一个 n (当x = 0, y = n - 1, x - y + n = 1)