zoukankan      html  css  js  c++  java
  • Sudoku Solver leetcode java

    题目

    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.


    A sudoku puzzle...


    ...and its solution numbers marked in red.

    题解:

    第一反应就是N皇后问题。就是一点点尝试着填数,不行的话就回溯,直到都填满就返回。

    如果对一个格子尝试从0~9都不行,那么说明整个sudoku无解,返回false就好。

    对整个棋盘所有'.'都填完了,那么就可以返回true了。

     1     public void solveSudoku(char[][] board) {
     2         if (board==null||board.length==0)
     3             return;
     4         helper(board);
     5     }
     6     
     7     private boolean helper(char[][] board){
     8         for(int i=0; i<board.length; i++){
     9             for (int j=0; j<board[0].length; j++){
    10                 if (board[i][j]=='.'){
    11                     for (char num='1'; num<='9'; num++){//尝试
    12                         if(isValid(board, i, j, num)){
    13                             board[i][j]=num;
    14                             
    15                             if (helper(board))
    16                                 return true;
    17                             else
    18                                 board[i][j]='.';//回退
    19                         }
    20                     }
    21                     return false;
    22                 }
    23             }
    24         }
    25         
    26         return true;
    27     }
    28     
    29     private boolean isValid(char[][] board, int i, int j, char c){
    30         // check column
    31         for (int row=0; row<9; row++)
    32             if (board[row][j] == c)
    33                 return false;
    34         
    35        // check row
    36         for (int col=0; col<9; col++)
    37             if (board[i][col]==c)
    38                 return false;
    39       
    40         // check block
    41         for(int row=i/3*3; row<i/3*3+3; row++)
    42             for (int col=j/3*3; col<j/3*3+3; col++)
    43                 if (board[row][col]==c)
    44                     return false;
    45                     
    46         return true;
    47     }

    Reference:http://rleetcode.blogspot.com/2014/01/sudoku-solver-java.html

  • 相关阅读:
    JSP内置对象
    Java数据结构
    Java引用传递
    椭圆曲线算法的基本原理及实现
    常见的Java异常
    Java数据结构
    Java数据结构
    重拾JSP
    [洛谷P6185] [NOI online 提高]T1 序列
    [题解][BZOJ1299]巧克力棒
  • 原文地址:https://www.cnblogs.com/springfor/p/3884252.html
Copyright © 2011-2022 走看看