计算机低能儿从0刷leetcode | 36.有效的数独
题目:36. 有效的数独
思路:
1、我们分别建立三张9*9的表row、col、block。
row[i][num]代表数独表的第i行中,数字num+1出现的次数(因为num的范围是0-8,而代表的数字是1-9);col[j][num]代表数独表第j列中,数字num+1出现的次数;block[k][num]代表数独表第k个块中,数字num+1出现的次数。
2、接下来我们只需要遍历一次数独表,判断row[i][num]、col[j][num]和block[k][num]是否会超过1,是则代表不是有效数独,如果都没有超过1则是有效的数独。
代码:
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
int row[9][9],col[9][9],block[9][9];
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
if(board[i][j]=='.') continue;
int k=(j/3)+(i/3)*3;
char x = board[i][j];
int num = x-'0'-1;
if(row[i][num]==1) return false;
else row[i][num]++;
if(col[j][num]==1) return false;
else col[j][num]++;
if(block[k][num]==1) return false;
else block[k][num]++;
}
}return true;
}
};