Sudoku Solver

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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值