题目
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个横行,9个竖行,和9个方框没有重复的数字。当然一个一个判断是可以,但是可以找到其中的规律,具体参考代码。
bool isValidSudoku(char** board, int boardRowSize, int boardColSize) {
bool answer=true;
int temp[10]={0};
//判断横行
for(int i=0;i<9;i++)
{
for(int k=0;k<10;k++)
temp[k]=0;
for(int j=0;j<9;j++)
{
if(board[i][j]!='.')
{
if(temp[board[i][j]-'0']==0)
{
temp[board[i][j]-'0']=1;
}
else
{
answer=false;break;
}
}
}
}
//判断竖行
for(int i=0;i<9;i++)
{
for(int k=0;k<10;k++)
temp[k]=0;
for(int j=0;j<9;j++)
{
if(board[j][i]!='.')
{
if(temp[board[j][i]-'0']==0)
{
temp[board[j][i]-'0']=1;
}
else
{
answer=false;break;
}
}
}
}
//9个方框
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
for(int k=0;k<10;k++)
temp[k]=0;
int left[9] ={0+3*i,0+3*i,0+3*i,1+3*i,1+3*i,1+3*i,2+3*i,2+3*i,2+3*i};
int right[9]={0+3*j,1+3*j,2+3*j,0+3*j,1+3*j,2+3*j,0+3*j,1+3*j,2+3*j};
for(int k=0;k<9;k++)
{
if(board[left[k]][right[k]]!='.')
{
if(temp[board[left[k]][right[k]]-'0']==0)
{
temp[board[left[k]][right[k]]-'0']=1;
}
else
{
answer=false;break;
}
}
}
}
}
return answer;
}