题目描述
验证给出的数独矩阵是否有效
一刷WA set
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
set<int> st;
//bool symbol = true;
for(int i=0;i<9;i++){//9行
for(int j=0;j<9;j++){//9列
if(board[i][j]!='.'){
auto iter = st.find(board[i][j]-'0');
if(iter!=st.end()){
return false;
}
else{
st.insert(board[i][j]-'0');
}
}
}
st.clear();
}
for(int i=0;i<9;i++){//9列
for(int j=0;j<9;j++){//9行
if(board[j][i]!='.'){
auto iter2 = st.find(board[j][i]-'0');
if(iter2!=st.end()){
return false;
//break;
}
else{
st.insert(board[i][j]-'0');
}
}
}
st.clear();
}
for(int k=0;k<7;k+=3){
for(int m=0;m<7;m+=3){
for(int i=0;i<3;i++){
if(board[k+i][m]!='.'){
auto iter1 = st.find(board[k+i][m]);
if(iter1!=st.end()){
return false;
}
else{
st.insert(board[k+i][m]-'0');
}
}
}
st.clear();
}
}
return true;
}
};
二刷 错误总结
- 细节题 用bool数组比较好
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
for(int i=0;i<9;++i){
bool arr[] = {false,false,false,false,false,false,false,false,false};
for(int j=0;j<9;++j){
if(board[i][j]=='.')
continue;
int tmp=board[i][j]-'0';
if(arr[tmp-1]==true)
return false;
else
arr[tmp-1]=true;
}
}
for(int i=0;i<9;++i){
bool arr[] = {false,false,false,false,false,false,false,false,false};
for(int j=0;j<9;++j){
if(board[j][i]=='.')
continue;
int tmp=board[j][i]-'0';
if(arr[tmp-1]==true)
return false;
else
arr[tmp-1]=true;
}
}
for(int i=0;i<9;++i){
bool arr[] = {false,false,false,false,false,false,false,false,false};
for(int j=0;j<9;++j){
int l=i/3*3+j/3,r=i%3*3+j%3;
if(board[l][r]=='.')
continue;
int tmp=board[l][r]-'0';
if(arr[tmp-1]==true)
return false;
else
arr[tmp-1]=true;
}
}
return true;
}
};