题意:给出一个数独,让你判断当前状态是否合法。
题解:判断是否合法,有3个规则,1.每行不能出现相同数字。2.没列不能出现相同数字。3.每个9宫格不能出现相同数字。
class Solution {
public:
bool check(vector<vector<char>>& board,int r,int c)
{
bool vis[11];
memset(vis,false,sizeof(vis));
for(int i = r; i < r + 3; i++)
{
for(int j = c; j < c + 3; j++)
{
if(board[i][j] == '.') continue;
int v = board[i][j] - '0';
if(vis[v]) return false;
vis[v] = true;
}
}
return true;
}
bool isValidSudoku(vector<vector<char>>& board) {
int n = board.size();
int m = board[0].size();
for(int i = 0; i < n; i++)
{
bool vis[11];
memset(vis,false,sizeof(vis));
for(int j = 0; j < m; j++)
{
if(board[i][j] == '.') continue;
int v = board[i][j] - '0';
if(vis[v])
return false;
vis[v] = true;
}
}
//cout<<"1"<<endl;
for(int i = 0; i < m; i++)
{
bool vis[11];
memset(vis,false,sizeof(vis));
for(int j = 0; j < n; j++)
{
if(board[j][i] == '.') continue;
int v = board[j][i] - '0';
if(vis[v])
return false;
vis[v] = true;
}
}
//cout<<"2"<<endl;
for(int i = 0; i < n; i += 3)
{
for(int j = 0; j < m; j += 3)
{
if(!check(board,i,j))
return false;
}
}
return true;
}
};