LeetCode
- 题目地址:https://leetcode.com/problems/valid-sudoku/
解题思路:这题目是要判断当前数独是否合理,而不是要填充完成,需要满足三个条件:
- 每行没有重复数字出现
- 每列没有重复数字出现
- 每个小方块没有重复数字出现
-用三个二维数组来表示9行,9列以及9个小方块是否用过某个数字,详细参考:https://discuss.leetcode.com/topic/8241/my-short-solution-by-c-o-n2
代码如下
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
int rowUsed[9][9], colUsed[9][9], subBoxUsed[9][9];
memset(rowUsed, 0, sizeof(rowUsed));
memset(colUsed, 0, sizeof(colUsed));
memset(subBoxUsed, 0, sizeof(subBoxUsed));
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (board[i][j] == '.')
continue;
int num = board[i][j] - '1';
int subBoxIndex = i / 3 * 3 + j / 3;
if (rowUsed[i][num] || colUsed[j][num] || subBoxUsed[subBoxIndex][num]) {
return false;
}
rowUsed[i][num] = 1;
colUsed[j][num] = 1;
subBoxUsed[subBoxIndex][num] = 1;
}
}
return true;
}
};