题目链接:初级算法 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台
思路: 这一题还是采用哈希的想法,从行、列和每个 的小矩阵中看有没有重复的,所以就可以用三个哈希表判断是否有重复冲突,小矩阵的计算方式可以见代码然后理解,注意题目中的使用 char 存储,所以要采用减'1'的方式计算下标。
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
vector<vector<int>> row_cnt(9, vector<int>(9, 0));
vector<vector<int>> col_cnt(9, vector<int>(9, 0));
vector<vector<int>> mat_cnt(9, vector<int>(9, 0));
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (board[i][j] != '.') {
// cout << i << j << endl;
if (++row_cnt[i][board[i][j] - '1'] > 1) return false;
if (++col_cnt[j][board[i][j] - '1'] > 1) return false;
if (++mat_cnt[i / 3 * 3 + j / 3][board[i][j] - '1'] > 1) return false;
}
}
}
return true;
}
};