请你判断一个 9 x 9
的数独是否有效。只需要根据以下规则 ,验证已经填入的数字是否有效即可。
- 数字
1-9
在每一行只能出现一次。 - 数字
1-9
在每一列只能出现一次。 - 数字
1-9
在每一个以粗实线分隔的3x3
宫内只能出现一次。(请参考示例图)
注意:
- 一个有效的数独(部分已被填充)不一定是可解的。
- 只需要根据以上规则,验证已经填入的数字是否有效即可。
- 空白格用
'.'
表示。
cpp
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
// check row
for (int i = 0; i<9; i++) {
int check[9] = {0};
for (int j = 0; j<9; j++) {
if (board[i][j] == '.') continue;
if (check[board[i][j] - '1'] != 0) {
return false;
}
check[board[i][j]-'1'] = 1;
}
}
// check col
for (int i = 0; i<9; i++) {
int check[9] = {0};
for (int j = 0; j<9; j++) {
if (board[j][i] == '.') continue;
if (check[board[j][i] - '1'] != 0) return false;
check[board[j][i]-'1'] = 1;
}
}
// check block
for (int i = 0; i<3; i++) {
for (int j = 0; j<3; j++) {
int check[9] = {0};
for (int ii = i*3; ii<i*3+3; ii++) {
for (int jj=j*3; jj<j*3+3; jj++) {
if (board[ii][jj] == '.') continue;
if (check[board[ii][jj] - '1'] != 0) return false;
check[board[ii][jj]-'1'] = 1;
}
}
}
}
return true;
}
};
好好好,一道数独做一天
学到的:check[board[i][j] - '1']用来表示索引上出现的次数