一、问题描述
请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)
二、问题分析
主要就是要遍历该二维数组,如果元素是数字的话,就将其在特定的行列格中该数的位置置1,因为只会出现一次,所以后面在判断该位置不是0的话就代表之前出现过了。
三、代码
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
int len = board.size();
vector<vector<int>> line(len, vector<int>(len));
vector<vector<int>> col(len, vector<int>(len));
vector<vector<int>> cell(len, vector<int>(len));
int num, k;
for(int i = 0; i < len; i++)
{
for(int j = 0; j < len; j++)
{
if(board[i][j] == '.')
continue;
else
num = board[i][j] - '0' - 1;
k = i/3*3 + j/3;
if(line[i][num] != 0 || col[j][num] != 0 || cell[k][num] != 0)
{
return false;
}
line[i][num] = col[j][num] = cell[k][num] = 1;
}
}
return true;
}
};