37. Sudoku Solver
Write a program to solve a Sudoku puzzle by filling the empty cells.
Empty cells are indicated by the character ‘.’.
You may assume that there will be only one unique solution.
A sudoku puzzle…
…and its solution numbers marked in red.
题意:
编写一个程序,通过填充空单元格来解决数独难题。 空单元格用字符’.’表示。 可以假设仅有一种解决方法。具体填充实例看上图,规则参照36-Valid-Sudoku。
思路:
首先创建三个二维素组,rowIsValid[ i ][ n ]记录第 i 行,第n(1~9)个值已经出现,colIsValid[ j ][ n ]记录第 j 列,第n(1~9)个值已经出现,subboardIsValid[ b ][ n ]记录第 b 个小九宫格,第n(1~9)个值已经出现。
然后遍历九宫格面板,依次标记上述三个数组,来进行设置已经出现1~9的值的标志位。
当标记数组填充完毕后,进行递归搜索,从0到80,即九宫格的81个元素,进行递归填充,每次填充元素的时候都要从1到9九个数字进行选取判断,如果三个标记数组中都没有出现此元素,则可以选取此元素,然后标记 此元素在三个标记数组中出现,最后递归填充下一个元素,如果成功不进行回溯,一直填充下去,如果不成功,要进行回溯,并且清除标记数组中的值,重新选取元素值。
1 | class Solution { |