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.
思路:判断每一行,每一列,每一个块里面是否有重复数字即可。行与列一起判断可以更快一些,16ms->15ms。
注:判重用 set 集合比较方便。
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
set<char> s; //使用 set 方便查重
set<char> s2;
//对每一行和每一列检查
for(int i=0;i<9;i++)
{
s.clear();
s2.clear();
for(int j=0;j<9;j++)
{
//每一行
if(board[i][j]>='0' && board[i][j]<='9')
{
if(s.find(board[i][j]) != s.end())
return false; //有重合
s.insert(board[i][j]);
}
//每一列
if(board[j][i]>='0' && board[j][i]<='9')
{
if(s2.find(board[j][i]) != s2.end())
return false; //有重合
s2.insert(board[j][i]);
}
}
}
//对每个块进行检查
for(int i=0;i<7;i+=3)
{
for(int j=0;j<7;j+=3)
{
s.clear();
for(int row=i;row<i+3;row++)
{
for(int col=j;col<j+3;col++)
{
if(board[row][col]>='0' && board[row][col]<='9')
{
if(s.find(board[row][col]) != s.end())
return false; //有重合
s.insert(board[row][col]);
}
}
}
}
}
return true;
}
};