Sudoku Solver

题目地址:
https://leetcode.com/problems/sudoku-solver/#/description

题目:

Write a program to solve a Sudoku puzzle by filling the empty cells.
Empty cells are indicated by the character '.'.
You may assume that there will be only one unique solution.

解题思路:
这道题应该使用递归,首先是当需要填(is '.')的时候才进行判断,让填入1-9个数字的时候,如果是ok的,那么就recursive的去解,如果可以解,那么返回true;但是如果填入'.'之后还不能解,那么返回false。最后如果没有进入判断'.',就在最后返回true。

代码:


public void solveSudoku(char[][] board) {
    if(board == null || board.length == 0){
        return;
    }
    solve(board);
}

private boolean solve(char[][] board) {
    for(int i = 0; i <= 8; i++){
        for(int j = 0; j <= 8; j++){
            if(board[i][j] == '.'){
                for(char num = '1'; num <= '9'; num++){
                    if(isValid(board, i, j, num)){
                        board[i][j] = num;
                        if(solve(board)){
                            return true;
                        }
                        else{
                            board[i][j] = '.';
                        }
                    }
                }
                return false;
            }
        }
    }
    return true;
}

private boolean isValid(char[][] board, int i, int j, char num) {
    for(int k = 0; k <= 8; k++){
        if(board[i][k] == num){
            return false;
        }
    }
    for(int k = 0; k <= 8; k++){
        if(board[k][j] == num){
            return false;
        }
    }
    for(int row = (i / 3) * 3; row <= (i / 3) * 3 + 2; row++){
        for(int col = (j / 3) * 3; col <= (j / 3) * 3 + 2; col++){
            if(board[row][col] == num){
                return false;
            }
        }
    }
    return true;
}





Comments

Popular Posts