判断一个数独是否是有效的
1、每一行1-9只出现一次
2、每一列1-9只出现一次
3、每一个单元格1-9只出现一次
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
int i,j;
char gc;
for(i = 0; i <=8; ++i)
{
vector<int> row_c(9,0);
for(j =0 ; j <=8; ++j){
if(board[i][j]=='.')
continue;
if(board[i][j]>='1'&&board[i][j]<='9')
row_c[board[i][j]-'1']++;
else
return false;
if(row_c[board[i][j]-'1']>1)
return false;
}
}
for(i = 0; i <=8; ++i)
{
vector<int> col_c(9,0);
for(int j =0 ; j <=8; ++j){
if(board[j][i]=='.')
continue;
if(board[j][i]>='1'&&board[j][i]<='9')
col_c[board[j][i]-'1']++;
else
return false;
if(col_c[board[j][i]-'1']>1)
return false;
}
}
for(i = 0; i <=8; i++)
{
vector<int> grid_c(9,0);
for(int j =0 ; j <=8; ++j){
gc=board[i/3*3+j/3][i%3*3+j%3];
if(gc=='.')
continue;
if(gc>='1'&&gc<='9')
grid_c[gc-'1']++;
else
return false;
if(grid_c[gc-'1']>1)
return false;
}
}
return true;
}
};
Three flags are used to check whether a number appear.
used1: check each row
used2: check each column
used3: check each sub-boxes
class Solution
{
public:
bool isValidSudoku(vector<vector<char> > &board)
{
int used1[9][9] = {0}, used2[9][9] = {0}, used3[9][9] = {0};
for(int i = 0; i < board.size(); ++ i)
for(int j = 0; j < board[i].size(); ++ j)
if(board[i][j] != '.')
{
int num = board[i][j] - '0' - 1, k = i / 3 * 3 + j / 3;
if(used1[i][num] || used2[j][num] || used3[k][num])
return false;
used1[i][num] = used2[j][num] = used3[k][num] = 1;
}
return true;
}
};