題目描述
根據(jù)數(shù)獨的規(guī)則Sudoku Puzzles - The Rules.判斷給出的局面是不是一個符合規(guī)則的數(shù)獨局面
數(shù)獨盤面可以被部分填寫步悠,空的位置用字符'.'.表示
在這里插入圖片描述
這是一個部分填寫的符合規(guī)則的數(shù)獨局面
分析
- 先檢查每一行是否有重復(fù)的數(shù)字。
- 再檢查每列答姥。
- 最后檢查每一個3*3矩陣鹦付。
java 代碼
public class Solution {
public boolean isValidSudoku(char[][] board) {
if(board == null || board.length != 9 || board[0].length != 9){return false;}
//判斷所有行
for(int row = 0; row < 9; row ++){
//對于某一行 要有一個判斷用的數(shù)組
boolean visited [] = new boolean[9];
for(int i = 0;i < 9;i++){
if(board[row][i] != '.'){
int temp = board[row][i] - '1';
if(visited[temp] == false){
visited[temp] = true;
}else{
return false;
}
}
}
}
//判斷所有列
for(int col = 0; col < 9; col ++){
//對于某一列 要有一個判斷用的數(shù)組
boolean visited [] = new boolean[9];
for(int i = 0;i < 9;i++){
if(board[i][col] != '.'){
int temp = board[i][col] - '1';
if(visited[temp] == false){
visited[temp] = true;
}else{
return false;
}
}
}
}
//判斷矩陣
int range [] = {0,3,6};
for(int rowOff :range){
for(int colOff :range){
boolean visited [] = new boolean[9];
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++){
if(board[rowOff + i][colOff + j] != '.'){
int temp = board[rowOff + i][colOff + j] - '1';
if(visited[temp] == false){
visited[temp] = true;
}else{
return false;
}
}
}
}
}
}
return true;
}
}