37. 解数独

编写一个程序,通过已填充的空格来解决数独问题。

一个数独的解法需遵循如下规则:

数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
空白格用 ‘.’ 表示。

一个数独。

答案被标成红色。

Note:

给定的数独序列只包含数字 1-9 和字符 ‘.’ 。
你可以假设给定的数独只有唯一解。
给定数独永远是 9x9 形式的。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sudoku-solver
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {public void solveSudoku(char[][] board) {/*** 记录某行,某位数字是否已经被摆放*/boolean[][] row = new boolean[9][9];/*** 记录某列,某位数字是否已经被摆放*/boolean[][] col = new boolean[9][9];/*** 记录某 3x3 宫格内,某位数字是否已经被摆放*/boolean[][] block = new boolean[9][9];for (int i = 0; i < 9; i++) {for (int j = 0; j < 9; j++) {if (board[i][j] != '.') {int num = board[i][j] - '1';row[i][num] = true;col[j][num] = true;// blockIndex = i / 3 * 3 + j / 3,取整block[i / 3 * 3 + j / 3][num] = true;}}}dfs(board, row, col, block, 0, 0);}private boolean dfs(char[][] board, boolean[][] row, boolean[][] col, boolean[][] block, int i, int j) {// 找寻空位置while (board[i][j] != '.') {if (++j >= 9) {i++;j = 0;}if (i >= 9) {return true;}}for (int num = 0; num < 9; num++) {int blockIndex = i / 3 * 3 + j / 3;if (!row[i][num] && !col[j][num] && !block[blockIndex][num]) {// 递归board[i][j] = (char) ('1' + num);row[i][num] = true;col[j][num] = true;block[blockIndex][num] = true;if (dfs(board, row, col, block, i, j)) {return true;} else {// 回溯row[i][num] = false;col[j][num] = false;block[blockIndex][num] = false;board[i][j] = '.';}}}return false;}private void printBoard(char[][] board) {for (int i = 0; i < 9; i++) {for (int j = 0; j < 9; j++) {System.out.print(board[i][j] + " ");}System.out.println();}}
}

Java实现 LeetCode 37 解数独相关推荐

  1. Leetcode算法Java全解答--37. 解数独

    Leetcode算法Java全解答–37. 解数独 文章目录 Leetcode算法Java全解答--37. 解数独 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 编写一个 ...

  2. LeetCode—37. 解数独(困难)

    37. 解数独(困难) 题目描述: 编写一个程序,通过填充空格来解决数独问题. 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 ...

  3. LintCode 802. 数独(回溯)/ LeetCode 37. 解数独

    1. 题目 编写一个程序,通过填充空单元来解决数独难题. 空单元由数字0表示. 你可以认为只有一个唯一的解决方案. LeetCode 37 题类似,把 int 改成 char,注意转换 2. 解题 行 ...

  4. 递归生成数独java_[leetcode] 37. 解数独(Java)(dfs,递归,回溯)

    1A 这个题其实15分钟左右就敲出来并且对了...但是由于我输错了一个数..导致我白白debug一个多小时.. 没啥难度,练递归-dfs的好题 class Solution { private int ...

  5. leetcode 37. 解数独 思考分析

    目录 题目 核心思路的不断细化 1.核心框架 2.考虑到每个位置的工作 3.考虑到到达最后一列.该位置的数已经预置的情况 4.判断是否符合规则的函数 5.确定递归终止条件+确定函数返回值 AC代码 题 ...

  6. LeetCode 37. 解数独

    一.题目描述 编写一个程序,通过填充空格来解决数独问题. 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 ...

  7. LeetCode 37 解数独

    题目描述 编写一个程序,通过填充空格来解决数独问题.一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 3x ...

  8. LeetCode 37. 解数独 Sudoku Solver

    编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 3x3 ...

  9. LeetCode高频题37. 解数独

    LeetCode高频题37. 解数独 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们在公司养了一大批ACM竞赛的 ...

最新文章

  1. Hibernate 配置 p6spy 显示完整 sql 语句
  2. 华为如何生成日志_华为应用市场AppGallery Connect开发者沙龙:全面提升应用质量...
  3. Android中LayoutInflater的使用
  4. 真实!拖垮中小技术团队的 11 宗罪
  5. oracle 学习笔记 Flashback drop
  6. IT十八掌作业_java基础第十一天_集合
  7. 匿名函数,结合闭包的写法,js对象的案例
  8. python不支持_为什么 Python 不支持函数重载?而其他语言大都支持?
  9. 如何将RTC中基于AI的音频算法有效的产品化
  10. django model 数据类型
  11. 本地windows主机无法访问虚拟机里主机解决办法
  12. html定位ajax php,AJAX HTML PHP问题
  13. 你需要了解的HashMap、HashTable和ConcurrentHashMap的区别
  14. linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解?
  15. Cisco 修复云服务平台重大漏洞
  16. echarts legend颜色_Canvas专题—综合案例:echarts实现k线图(11)
  17. 不同vlan之间如何ping通_如何利用交换机实现不同VLAN、不同网段之间互访?
  18. Computer Science 领域文献检索 SCI、CPCI-S 和 EI
  19. 社会力模型SFM详解 在人群异常检测上的应用
  20. Adobe XD常见问题和解决方案

热门文章

  1. 大内高手 内存管理器
  2. C语言程序设计(2018-2019学年第一学期测试卷)
  3. 1016 Phone Bills (25分)
  4. CSP-J冲刺 P1359 租用游艇
  5. 夜间环境人脸识别_基于人脸识别的夜间疲劳驾驶判断方法与流程
  6. node.js 下载速度慢问题
  7. 环信java,java集成环信 - IM Geek开发者社区-移动开发者社区-开源社区-IM Geek官网...
  8. 网络准入系统usersafe守护企业内网安全
  9. 《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令
  10. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(8.20)-- ANA