請判定一個數獨是否有效。
該數獨可能只填充了部分數字,其中缺少的數字用 .
表示。
class Solution {
/**
* @param board: the board
@return: wether the Sudoku is valid
*/
public boolean isValidSudoku(char[][] board) {
int[] rowValid= new int[10];//用於判斷某一行是否合法
int[] columnValid= new int[10];//用於判斷某一列是否合法
int[] subBoardValid =new int[10];//用於判斷某一個九宮格是否合法
for(int i = 0; i < 9; i++)
{
setZero(rowValid, 10);
setZero(columnValid, 10);
setZero(subBoardValid, 10);
for(int j = 0; j < 9; j++)
{
if(!checkValid(rowValid, board[i][j]-'0') ||
!checkValid(columnValid, board[j][i]-'0') ||
!checkValid(subBoardValid, board[3*(i/3) + j/3][3*(i%3) + j%3]-'0'))
return false;
}
}
return true;
}
void setZero(int[] record,int len){
for(int i=0;i<len;i++){
record[i]=0;
}
}
boolean checkValid(int[] vec, int val)
{
if(val < 0)return true;//對應的是字符‘.’
if(vec[val] == 1)return false;
vec[val] = 1;
return true;
}
};