题意:
判断一个填了一部分的数独有没有解。
思路:
按照数独规则判断即可,即同一行、同一列、同一个3*3的方格内没有数字重复出现。
代码:
class Solution {
public:
bool isValidSudoku(vector <vector<char>> &board) {
const int step = 3;
bool app[step * step];
for (int i = 0; i < step * step; ++i) {
memset(app, 0, sizeof(app));
for (int j = 0; j < step * step; ++j) {
if (board[i][j] != '.') {
if (app[board[i][j] - '1']) {
return false;
} else {
app[board[i][j] - '1'] = true;
}
}
}
memset(app, 0, sizeof(app));
for (int j = 0; j < step * step; ++j) {
if (board[j][i] != '.') {
if (app[board[j][i] - '1']) {
return false;
} else {
app[board[j][i] - '1'] = true;
}
}
}
memset(app, 0, sizeof(app));
int x = i / 3 * 3, y = i % 3 * 3;
for (int j = 0; j < step * step; ++j) {
int dx = j / 3 + x, dy = j % 3 + y;
if (board[dx][dy] != '.') {
if (app[board[dx][dy] - '1']) {
return false;
} else {
app[board[dx][dy] - '1'] = true;
}
}
}
}
return true;
}
};