问题
https://leetcode.com/problems/valid-sudoku/
解法
枚举每一行,每一列和每一个小正方形,看是否有重复的数字。
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
if (board.size() ==0)
return true;
int n = board.size();
int m = board[0].size();
if(n!=m)
return false;
int rows[256];
int cols[256];
for (int i=0; i<n; ++i)
{
memset(rows+'1', 0, sizeof(int)*9);
memset(cols+'1', 0, sizeof(int)*9);
for(int j=0; j<n; ++j)
{
char now = board[i][j];
if (now!= '.'){
if (rows[now])
return false;
else
rows[now]= 1;
}
now = board[j][i];
if (now!= '.')
{
if (cols[now])
return false;
else
cols[now]=1;
}
}
}
int k[9][2] ={{-1,-1}, {-1, 0}, {-1, 1},{0,-1}, {0, 0}, {0, 1},{1,-1}, {1, 0}, {1, 1}};
for (int i=1; i+1<n; i+=3)
{
for (int j=1; j+1<n; j+=3)
{
memset(rows+'1', 0, sizeof(int)*9);
for(int s=0; s<9; ++s)
{
int ii = i+k[s][0];
int jj = j+k[s][1];
char now = board[ii][jj];
if (now!='.')
{
if (rows[now])
return false;
else
rows[now]=1;
}
}
}
}
return true;
}
};