37-sudoku-solver
[回溯法] 37:解数独
力扣链接:sudoku-solver
题目描述
编写一个程序,通过填充空格来解决数独问题。
数独的解法需 遵循如下规则:
- 数字 1-9 在每一行只能出现一次。
- 数字 1-9 在每一列只能出现一次。
- 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)
- 数独部分空格内已填入了数字,空白格用 ‘.’ 表示。
输入输出描述
board.length == 9
board[i].length == 9
board[i][j] 是一位数字 char
或者 ‘.’
题目数据 保证 输入数独仅有一个解
例如:
1 | [ |
思路
扫描一次——获取所有的带入点位置;获取现有的每一行的候选数字集,每一列的候选数字集,每一块的候选数字集。
以上述题干为例:
1 | [ |
为行候选数字集。
1 | [ |
为列候选数字集。
1 | [ |
为块候选数字集
dfs搜索——pop_back所有点位置,获取(x,y)
,对其枚举’1’-‘9’,如果在所有的候选数字集中,则在候选集修改该位置,则dfs继续搜索,如果在递归dfs搜索中找到结果则修改状态位flag = True
,返回。如果找到flag == True
,则跳出枚举;如果未找到flag == True
则回溯候选集位置,继续枚举。
代码
C/C++
1 | class Solution { |
Python
1 | class Solution(object): |