36. Valid Sudoku
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宫格数不能重复。
思路比较简单,但在实现的过程中遇到一些麻烦。刚开始用最简单的比较法来判断数是否重复,结果运行时间超时。
后采用map容器,大大减少了判断重复的时间。
代码如下:
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
int i,j,k,l,map[];
if(board.size()!= || board[].size()!=)
{
return false;
}
for(i=;i<;i++){
memset(map,,sizeof(map));
for(j=;j<;j++){
if(board[i][j]=='.')
{
continue;
}
if(board[i][j]<'' || board[i][j]>'')
{
return false;
}
int num=board[i][j]-'';
if(map[num])
{
return false;
}
map[num]=;
}
}
for(j=;j<;j++){
memset(map,,sizeof(map));
for(i=;i<;i++){
if(board[i][j]=='.')
{
continue;
}
int num=board[i][j]-'';
if(map[num])
{
return false;
}
map[num]=;
}
}
for(i=;i<;i+=){
for(j=;j<;j+=){
memset(map,,sizeof(map));
for(k=i;k<i+;k++){
for(l=j;l<j+;l++){
if(board[k][l]=='.')
{
continue;
}
int num=board[k][l]-'';
if(map[num])
{
return false;
}
map[num]=;
}
}
}
}
return true;
}
};