Java实现 LeetCode 37 解数独
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 解数独相关推荐
- Leetcode算法Java全解答--37. 解数独
Leetcode算法Java全解答–37. 解数独 文章目录 Leetcode算法Java全解答--37. 解数独 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 编写一个 ...
- LeetCode—37. 解数独(困难)
37. 解数独(困难) 题目描述: 编写一个程序,通过填充空格来解决数独问题. 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 ...
- LintCode 802. 数独(回溯)/ LeetCode 37. 解数独
1. 题目 编写一个程序,通过填充空单元来解决数独难题. 空单元由数字0表示. 你可以认为只有一个唯一的解决方案. LeetCode 37 题类似,把 int 改成 char,注意转换 2. 解题 行 ...
- 递归生成数独java_[leetcode] 37. 解数独(Java)(dfs,递归,回溯)
1A 这个题其实15分钟左右就敲出来并且对了...但是由于我输错了一个数..导致我白白debug一个多小时.. 没啥难度,练递归-dfs的好题 class Solution { private int ...
- leetcode 37. 解数独 思考分析
目录 题目 核心思路的不断细化 1.核心框架 2.考虑到每个位置的工作 3.考虑到到达最后一列.该位置的数已经预置的情况 4.判断是否符合规则的函数 5.确定递归终止条件+确定函数返回值 AC代码 题 ...
- LeetCode 37. 解数独
一.题目描述 编写一个程序,通过填充空格来解决数独问题. 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 ...
- LeetCode 37 解数独
题目描述 编写一个程序,通过填充空格来解决数独问题.一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 3x ...
- LeetCode 37. 解数独 Sudoku Solver
编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 3x3 ...
- LeetCode高频题37. 解数独
LeetCode高频题37. 解数独 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们在公司养了一大批ACM竞赛的 ...
最新文章
- Hibernate 配置 p6spy 显示完整 sql 语句
- 华为如何生成日志_华为应用市场AppGallery Connect开发者沙龙:全面提升应用质量...
- Android中LayoutInflater的使用
- 真实!拖垮中小技术团队的 11 宗罪
- oracle 学习笔记 Flashback drop
- IT十八掌作业_java基础第十一天_集合
- 匿名函数,结合闭包的写法,js对象的案例
- python不支持_为什么 Python 不支持函数重载?而其他语言大都支持?
- 如何将RTC中基于AI的音频算法有效的产品化
- django model 数据类型
- 本地windows主机无法访问虚拟机里主机解决办法
- html定位ajax php,AJAX HTML PHP问题
- 你需要了解的HashMap、HashTable和ConcurrentHashMap的区别
- linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解?
- Cisco 修复云服务平台重大漏洞
- echarts legend颜色_Canvas专题—综合案例:echarts实现k线图(11)
- 不同vlan之间如何ping通_如何利用交换机实现不同VLAN、不同网段之间互访?
- Computer Science 领域文献检索 SCI、CPCI-S 和 EI
- 社会力模型SFM详解 在人群异常检测上的应用
- Adobe XD常见问题和解决方案
热门文章
- 大内高手 内存管理器
- C语言程序设计(2018-2019学年第一学期测试卷)
- 1016 Phone Bills (25分)
- CSP-J冲刺 P1359 租用游艇
- 夜间环境人脸识别_基于人脸识别的夜间疲劳驾驶判断方法与流程
- node.js 下载速度慢问题
- 环信java,java集成环信 - IM Geek开发者社区-移动开发者社区-开源社区-IM Geek官网...
- 网络准入系统usersafe守护企业内网安全
- 《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令
- 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(8.20)-- ANA