LeetCode:解数独

题目:

我的答案:

看到这个题想到了慢慢试,需要回溯,但写起来还是难,就看了下别人的思路,然后自己敲了一下:

class Solution {
    public void solveSudoku(char[][] board) {
        boolean[][] row = new boolean[9][9];
        boolean[][] col = new boolean[9][9];
        boolean[][] grid = new boolean[9][9];

        //初始化
        for(int i=0;i<9;i++){
            for(int j=0;j<9;j++){
                if(board[i][j]!='.'){
                    int digit = board[i][j]-'0';
                    row[i][digit-1] = true;
                    col[j][digit-1] = true;
                    grid[(i/3)*3+(j/3)][digit-1] = true;
                }
            }
        }

        reSolveSudoku(board,row,col,grid,0,0);

    }
    public boolean reSolveSudoku(char[][] board,boolean[][] row,boolean[][] col,boolean[][] grid,int rowNum,int colNum){
        if(colNum==9){
            rowNum++;
            colNum = 0;
            if(rowNum==9){
                return true;
            }
        }

        if(board[rowNum][colNum]=='.'){
            for(int digit=1;digit<=9;digit++){
                if(!(row[rowNum][digit-1]||col[colNum][digit-1]||grid[(rowNum/3)*3+(colNum/3)][digit-1])){
                    board[rowNum][colNum]=(char)(digit+'0');
                    row[rowNum][digit-1] = true;
                    col[colNum][digit-1] = true;
                    grid[(rowNum/3)*3+(colNum/3)][digit-1] = true;
                    if(reSolveSudoku(board,row,col,grid,rowNum,colNum+1)){
                        return true;
                    }else{
                        board[rowNum][colNum]='.';
                        row[rowNum][digit-1] = false;
                        col[colNum][digit-1] = false;
                        grid[(rowNum/3)*3+(colNum/3)][digit-1] = false;
                    }
                }
            }
        }else{
            return reSolveSudoku(board,row,col,grid,rowNum,colNum+1);
        }
        return false;
    }
}

题解:

官方题解(试图看懂,但难看):

https://leetcode-cn.com/problems/sudoku-solver/solution/jie-shu-du-by-leetcode/

参考题解(看了这个去自己写):

https://leetcode-cn.com/problems/sudoku-solver/solution/hui-su-fa-jie-shu-du-by-i_use_python/

总结:

回溯!!!

发布了75 篇原创文章 · 获赞 2 · 访问量 8006

猜你喜欢

转载自blog.csdn.net/wyplj2015/article/details/104799130