有效的数独
题解如下:
代码如下:
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
bool st[9];
//判断行
for(int i = 0;i < 9;i++){
memset(st,0,sizeof st); //把st全部设为0
for(int j = 0;j < 9;j++){
if(board[i][j] != '.'){ //若当前位置不为.
int x = board[i][j] - '0'-1; //-1是数组下标是从0-8
if(st[x]) return false; //若当前位置已经出现过返回false
st[x] = true; //否则当前位置设为true
}
}
}
//判断列,跟上面的是一样的
for(int i = 0;i < 9;i++){
memset(st,0,sizeof st);
for(int j = 0;j < 9;j++){
if(board[j][i] != '.'){
int x = board[j][i] - '0'-1;
if(st[x]) return false;
st[x] = true;
}
}
}
//判断3X3的小方格
for(int i = 0;i < 9;i+= 3) {
for(int j = 0;j < 9;j+= 3){
memset(st,0,sizeof st);
for(int m = 0;m < 3;m++){
for(int n = 0;n < 3;n++){
if(board[i+m][j+n] != '.'){
int x = board[i+m][j+n] -'0'-1; //当前位置的坐标
if(st[x]) return false;
st[x] = true;
}
}
}
}
}
return true;
}
};
时间复杂度:O(1)
空间复杂度:O(1)