地址
https://leetcode-cn.com/problems/valid-sudoku/submissions/
描述
代码
y总的代码
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& b) {
bool stu[9];
//数字 1-9 在每一行只能出现一次。
for(int i=0;i<9;i++){
memset(stu,0,sizeof stu);
for(int j=0;j<9;j++){
if(b[i][j]!='.'){
int t=b[i][j]-'1';
if(stu[t]) return false;
else stu[t]= true;
}
}
}
//数字 1-9 在每一列只能出现一次。
for(int i=0;i<9;i++){
memset(stu,0,sizeof stu);
for(int j=0;j<9;j++){
if(b[j][i]!='.'){
int t=b[j][i]-'1';
if(stu[t]) return false;
else stu[t]= true;
}
}
}
//数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次
for(int i=0;i<9;i+=3){
for(int j=0;j<9;j+=3){
memset(stu,0,sizeof stu);
//对于每个3*3矩阵分析
for(int x=0;x<3;x++){
for(int y=0;y<3;y++){
if(b[i+x][j+y]!='.'){
int t=b[i+x][j+y]-'1';
if(stu[t]) return false;
else stu[t]=true;
}
}
}
}
}
return true;
}
};
我自己写的
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
//每数字 1-9 在每一行只能出现一次。
unordered_map<char,int> num;
for(int i=0;i<board.size();i++){
for(int j=0;j<board[0].size();j++){
if(board[i][j]=='.') continue;
if(num[board[i][j]]>0) return false;
else num[board[i][j]]++;
}
//每次执行完毕都要清0
num.clear();
}
num.clear();//清空数组
//数字 1-9 在每一列只能出现一次。
for(int i=0;i<board[0].size();i++){
for(int j=0;j<board.size();j++){
if(board[j][i]=='.') continue;
if(num[board[j][i]]>0) return false;
else num[board[j][i]]++;
}
num.clear();
}
//数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
for(int n=0;n<9;n++){
for(int i=(n%3)*3;i<(n%3+1)*3;i++){
for(int j=(n/3)*3;j<(n/3+1)*3;j++){
if(board[i][j]=='.') continue;
if(num[board[i][j]]>0) return false;
else num[board[i][j]]++;
}
}
num.clear();
}
return true;
}
};