class Solution {
public:
bool validSudoku(vector<vector<char> > &board) {
int i=0,j=0;
int count[10];
for (i=0; i<9; i++)
{
memset(count, 0, sizeof(int)*10);
for(j=0; j<9; j++)
{
if (board[i][j]!='.') {
if (count[board[i][j]-'0']==1)
{
return false;
}else {
count[board[i][j]-'0']=1;
}
}
}
}
for (i=0; i<9; i++)
{
memset(count, 0, sizeof(int)*10);
for(j=0; j<9; j++)
{
if (board[j][i]!='.') {
if (count[board[j][i]-'0']==1)
{
return false;
}else {
count[board[j][i]-'0']=1;
}
}
}
}
for (i=0; i<9; i+=3) {
for (j=0; j<9; j+=3) {
memset(count, 0, sizeof(int)*10);
int c=0,r=0;
for (r=0; r<3; r++) {
for (c=0; c<3; c++) {
if (board[i+r][j+c]!='.') {
if (count[board[i+r][j+c]-'0']==1)
{
return false;
}else {
count[board[i+r][j+c]-'0']=1;
}
}
}
}
}
}
return true;
}
bool solve(vector<vector<char> > &board, int position) {
while (position<81 && board[position/9][position%9]!='.') {
position++;
}
if (position==81) {
return true;
}
int x=position/9;
int y=position%9;
for (int i=1; i<=9; i++) {
board[x][y] = i+'0';
if (validSudoku(board)) {
if (solve(board, position+1)) {
return true;
}
}
}
board[x][y] = '.';
return false;
}
void solveSudoku(vector<vector<char> > &board) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
solve(board, 0);
}
};
Time Limit Error when judge large.