题目连接:Leetcode 036 Valid Sudoku
解题思路:枚举每个 '.' 的位置,判断它是否有合法的数。复杂度为o(n^6),但是因为n=9,所以可以接受。
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
int n = 9, c[9];
bool change = true;
for (int i = 0; i < n; i++) {
// Row
for (int k = 0; k < n; k++) c[k] = 0;
for (int k = 0; k < n; k++) {
if (board[i][k] != '.') {
c[board[i][k]-'1']++;
if (c[board[i][k]-'1'] > 1)
return false;
}
}
// Column
for (int k = 0; k < n; k++) c[k] = 0;
for (int k = 0; k < n; k++) {
if (board[k][i] != '.') {
c[board[k][i]-'1']++;
if (c[board[k][i]-'1'] > 1)
return false;
}
}
// Block
for (int k = 0; k < n; k++) c[k] = 0;
for (int k = 0; k < n; k++) {
int x = i / 3 * 3 + k / 3, y = i % 3 * 3 + k % 3;
if (board[x][y] != '.') {
c[board[x][y]-'1']++;
if (c[board[x][y]-'1'] > 1)
return false;
}
}
}
return true;
}
};