描写叙述:
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
The Sudoku board could be partially filled, where empty cells are filled with the character '.'.
![]()
A partially filled sudoku which is valid.
Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.
思路:
和一圈又一圈由外而内打印数字一样。考察的也就是程序的运行流程和边界值的把握。而这一题就更简单。由题意可知,本题考查的是每行每列和9个板块之间是不是都符合要求,和八皇后有点像。但要简单的多。
代码:
public class Solution {
public boolean isValidSudoku(char[][] board) {
BitSet set=new BitSet();
int i,j,m,k,index_i,index_j;
int num=0;
//to evaluate if the 9 blocks are OK
for( i=0;i<board.length;i+=3)
{
for( j=0;j<board[0].length;j+=3)
{
set.clear();
index_i=i+3;
index_j=j+3;
for( m=i;m<index_i;m++)
{
for( k=j;k<index_j;k++)
{
if(board[m][k]!='.')
{
num=board[m][k]-'0';
if(!set.get(num))
set.set(num);
else
return false;
}
}
}
}
}
//to evaluate the rows
for(i=0;i<board.length;i++)
{
set.clear();
for(j=0;j<board[0].length;j++)
{
if(board[i][j]!='.')
{
num=board[i][j]-'0';
if(!set.get(num))
set.set(num);
else
return false;
}
}
}
//to evalueate the colums
for(j=0;j<board[0].length;j++)
{
set.clear();
for( i=0;i<board.length;i++)
{
if(board[i][j]!='.')
{
num=board[i][j]-'0';
if(!set.get(num))
set.set(num);
else
return false;
}
}
}
return true;
}
}