class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
int v_tmp[11] = {0};
int index,r,c;
for (int i = 0; i < 9; i++) {
memset(v_tmp, 0, sizeof(v_tmp));
for (int j = 0; j < 9; j++) {
if (board[i][j] != '.') {
index = board[i][j] - '0';
v_tmp[index]++;
if (v_tmp[index] > 1) return false;
}
}
}
for (int j = 0; j < 9; j++) {
memset(v_tmp, 0, sizeof(v_tmp));
for (int i = 0; i < 9; i++) {
if (board[i][j] != '.') {
index = board[i][j] - '0';
v_tmp[index]++;
if (v_tmp[index] > 1) return false;
}
}
}
for (int k = 0; k < 9; k++) {
r = (k / 3) * 3;
c = (k % 3) * 3;
memset(v_tmp, 0, sizeof(v_tmp));
for (int i = r; i < r + 3; i++) {
for (int j = c; j < c + 3; j++) {
if (board[i][j] != '.') {
index = board[i][j] - '0';
v_tmp[index]++;
if (v_tmp[index] > 1) return false;
}
}
}
}
return true;
}
};
思路
每一行、每一列、每一个九宫格分别进行判断;
判断方法:使用一个临时数组,遇到一个数字则记录,在一次判断中,若出现两次同一的数字,返回false;
要点
board输入为字符数组,需要转化成整数索引操作临时数组;
memset函数的第三个参数为复制给定值的字符数,以byte计算