题目:https://oj.leetcode.com/problems/valid-sudoku/
题意:判断一个数独是否是正确的,这也是后面解数独题的一个部分,如果是格子里是“.”直接跳到下一次循环
思路:3个判断+1个大的二维数组循环
将整个二维数组循环一遍,每一个格子做三个判断,行,列,小格子
用三个二维数组去记录这三个判断的结果,比如bool row[9][9];这个记录行的,比如row[1][5],代表第一行里有没有5这个数,有true,没有false,以此类推另外两个记录数组,col和sub
注意判断小格子时,看这个数属于第几小格子是要试一下的。。。。
class Solution {
public:
bool isValidSudoku(vector<vector<char> > &board) {
bool rows[9][9];<span style="white-space:pre"> </span>//记录行里每个元素出现过的情况 下面类似
bool cols[9][9];
bool sub[9][9];
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
rows[i][j]=false;
cols[i][j]=false;
sub[i][j]=false;
}
}
for(int i = 0;i<9;i++){
for(int j = 0;j<9;j++){
int one = board[i][j] - '1';
if (board[i][j] == '.') continue;
if(rows[i][one]||cols[j][one]||sub[i/3*3 + j/3][one])
return false;
else rows[i][one]=cols[j][one]=sub[i/3*3 + j/3][one]=true;<span style="white-space:pre"> </span>//注意判断小格子的方法
}
}
return true;
}
};