码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode37. Sudoku Solver

时间:2019-12-30 21:07:15      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:一个   void   boolean   char   int   sudo   else   i++   ++   

  1. 题目链接

    传送门

  2. 题意

    数独游戏大家都有玩过, 本题给出一个9*9数独棋盘, 你需要给出一个合法的终局棋盘

  3. 解题思路

    对每一个位置dfs搜索可行解, 81层dfs不会爆栈, 安心dfs就好, 搜索方式见代码

  4. AC代码

     class Solution {
    
         public void solveSudoku(char[][] board) {
             solve(board, 0);
         }
    
         public boolean solve(char[][] board, int num) {
             if(num == 81) return true;
    
             int row = num / 9, col = num % 9;
             if(board[row][col] == '.') {
                 for(char ch = '1'; ch <= '9'; ++ch) {
                     if(isVaild(board, row, col, ch)) {
                         board[row][col] = ch;
                         if(solve(board, num + 1))
                             return true;
                         else
                             board[row][col] = '.';
                     }
                 }
                 return false;
             }
             return (solve(board, num + 1));
         }
    
         public boolean isVaild(char[][] board, int r, int c, char ch) {
             for(int i = 0; i < 9; i++) {
                 if(board[i][c] == ch) return false;
                 if(board[r][i] == ch) return false;
                 if(board[3 * (r / 3) + i / 3][3 * (c / 3) + i % 3] == ch) return false;
             }
             return true;
         }
     }
  5. PS

    第一次使用markdown写博客, 生疏且僵硬, 555~~

LeetCode37. Sudoku Solver

标签:一个   void   boolean   char   int   sudo   else   i++   ++   

原文地址:https://www.cnblogs.com/fan-jiaming/p/12121388.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!