leetcode 37. Sudoku Solver

来源:互联网 发布:wemall java版 编辑:程序博客网 时间:2024/05/17 07:21
public class Solution { public static void main(String[] args) {char[][] input = {{'5','3','.','.','7','.','.','.','.'},{'6','.','.','1','9','5','.','.','.'},{'9','8','.','.','.','.','.','6','.'},{'8','.','.','.','6','.','.','.','3'},{'4','.','.','8','.','3','.','.','1'},{'7','.','.','.','2','.','.','.','6'},{'.','6','.','.','.','.','2','8','.'},{'.','.','.','4','1','9','.','.','5'},{'.','.','.','.','8','.','.','7','9'}};solveSudoku(input);}public static void solveSudoku(char[][] board) {        solve(board);        for(int i = 0;i<9;i++){        for(int j = 0;j<9;j++){        System.out.print(board[i][j]);        }        System.out.println();        }    }    public static boolean solve(char[][] board){for(int i = 0;i<9;i++){for(int j = 0;j<9;j++){if(board[i][j] == '.'){for(char m = '1';m<='9';m++){//给'.'的位置按顺序赋1-9的值board[i][j] = m;if(isValid(board,i,j)&&solve(board)){//检查赋值后的矩阵是否合法,并迭代检查到最后是否合法return true;}board[i][j] = '.';}return false;}}}return true;}public static boolean isValid(char[][] board, int row ,int col){//看是否在同行同列同九个格中有相同的值for(int i = 0;i<9;i++){if(i != row && board[i][col] == board[row][col]){return false;}}for(int i = 0;i<9;i++){if(i!=col && board[row][i] == board[row][col]){return false;}}int beginRow = 3*(row/3);int beginCol = 3*(col/3);for(int i = beginRow;i<beginRow+3;i++){for(int j = beginCol;j<beginCol+3;j++){if(i!=row&&j!=col&&board[i][j] == board[row][col]){return false;}}}return true;}}

0 0
原创粉丝点击