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.
题意
检测所给数独库是否符合数独游戏要求。
数独要求每个九宫格放1-9个数,不能重复。每行每列也要满足这个要求。
题解
无非是遍历每行每列以及每个九宫格。
//cpp
//时间复杂度O(n^2),空间复杂度O(1)
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
for(int i=0;i!=9;i+=3)
{
for(int j=0;j!=9;j+=3)
{
if(!check1(board,i,j))
return false;
}
}
for(int i=0;i!=9;i++)
{
if(!check2(board,i,0))
return false;
}
for(int i=0;i!=9;i++)
{
if(!check3(board,0,i))
return false;
}
return true;
}
bool check1(vector<vector<char>>& board,int row,int col)
{
int temp[10]={0};
for(int i=row;i!=row+3;i++)
{
for(int j=col;j!=col+3;j++)
{
if(board[i][j]!='.')
{
int n=board[i][j]-'0';
if(temp[n]>=1)
return false;
else temp[n]++;
}
}
}
return true;
}
bool check2(vector<vector<char>>& board,int row,int col)
{
int temp[10]={0};
for(int i=0;i!=9;i++)
{
if(board[row][i]!='.')
{
int n=board[row][i]-'0';
if(temp[n]>=1)
return false;
else temp[n]++;
}
}
return true;
}
bool check3(vector<vector<char>>& board,int row,int col)
{
int temp[10]={0};
for(int i=0;i!=9;i++)
{
if(board[i][col]!='.')
{
int n=board[i][col]-'0';
if(temp[n]>=1)
return false;
else temp[n]++;
}
}
return true;
}
};