编写一个程序,通过已填充的空格来解决数独问题。
一个数独的解法需遵循如下规则:
- 数字
1-9
在每一行只能出现一次。- 数字
1-9
在每一列只能出现一次。- 数字
1-9
在每一个以粗实线分隔的3x3
宫内只能出现一次。空白格用
'.'
表示。
一个数独。
答案被标成红色。
Note:
- 给定的数独序列只包含数字
1-9
和字符'.'
。- 你可以假设给定的数独只有唯一解。
- 给定数独永远是
9x9
形式的。暴力回溯,遍历行,列和3*3的正方形。
class Solution { public void solveSudoku(char[][] board) { search(board); } private boolean search(char[][] board) { for(int i=0;i<board.length;i++) { for(int j=0;j<board[0].length;j++) { if(board[i][j]!='.') continue; for(char ch='1';ch<='9';ch++) { if(!vj(board,i,j,ch)) { continue; } board[i][j]=ch; if(search(board)) { return true; } else board[i][j]='.'; } return false; } } return true; } private boolean vj(char[][] board,int i,int j,char ch) { for(int col=0;col<9;col++) //行 { if(board[i][col]==ch) { return false; } } for(int row=0;row<9;row++) //列 { if(board[row][j]==ch) { return false; } } //3*3的格子内 for(int row=i/3*3;row<i/3*3+3;row++) { for(int col=j/3*3;col<j/3*3+3;col++) { if(board[row][col]==ch) { return false; } } } return true; } };
Leetcode 37. 解数独 暴力
最新推荐文章于 2022-03-31 12:58:54 发布