37. Sudoku Solver

来源:互联网 发布:特比尔定位软件 编辑:程序博客网 时间:2024/06/05 07:10

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.

leetcode37-1
A sudoku puzzle…

leetcode37-2
…and its solution numbers marked in red.

思路;
DFS + BackTracking

class Solution {    public void solveSudoku(char[][] board) {        if(board == null || board.length == 0) return;        solve(board);    }    public boolean solve(char[][] board){        for(int i=0; i<board.length; i++){            for(int j=0; j<board[0].length; j++){                if(board[i][j] == '.'){                    for(char c = '1'; c <= '9'; c++){                        if(isValid(board, i, j, c)){                            board[i][j] = c;                            if(solve(board)) return true;                            else board[i][j] = '.';                        }                    }                    return false;                }            }        }        return true;    }    private boolean isValid(char[][] board, int row, int col, char c){        for(int i = 0; i < 9; i++){            if(board[row][i] == c || board[i][col] == c) return false;            if(board[row / 3 * 3 + i / 3][col / 3 * 3 + i % 3] == c) return false;        }        return true;    }}