递归生成数独java_[leetcode] 37. 解数独(Java)(dfs,递归,回溯)
1A
这个题其实15分钟左右就敲出来并且对了。。。但是由于我输错了一个数。。导致我白白debug一个多小时。。
没啥难度,练递归-dfs的好题
class Solution {
private int which(int i, int j) {
if (i <= 2) {
if (j <= 2)
return 1;
if (j <= 5)
return 2;
return 3;
}
if (i <= 5) {
if (j <= 2)
return 4;
if (j <= 5)
return 5;
return 6;
}
if (j <= 2)
return 7;
if (j <= 5)
return 8;
return 9;
}
public void solveSudoku(char[][] board) {
int[][] k = new int[10][10];
// heng
int[][] p = new int[10][10];
// shu
int[][] q = new int[10][10];
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (board[i][j] != '.') {
p[i][board[i][j] - '0'] = 1;
q[j][board[i][j] - '0'] = 1;
k[which(i, j)][board[i][j] - '0'] = 1;
}
}
}
dfs(k, p, q, board, 0, 0);
}
private boolean dfs(int[][] k, int[][] p, int[][] q, char[][] board, int i, int j) {
if (j == 9) return true;
if (board[i][j] != '.') {
if (i + 1 < 9) {
boolean rst = dfs(k, p, q, board, i + 1, j);
if (rst) {
return true;
}
} else {
boolean rst = dfs(k, p, q, board, 0, j + 1);
if (rst) {
return true;
}
}
} else {
for (int x = 1; x <= 9; x++) {
if (p[i][x] != 1 && q[j][x] != 1 && k[which(i, j)][x] != 1) {
p[i][x] = 1;
q[j][x] = 1;
k[which(i, j)][x] = 1;
board[i][j] = (char) (x + '0');
if (i + 1 < 9) {
boolean rst = dfs(k, p, q, board, i + 1, j);
if (rst) {
return true;
}
} else {
boolean rst = dfs(k, p, q, board, 0, j + 1);
if (rst) {
return true;
}
}
p[i][x] = 0;
q[j][x] = 0;
k[which(i, j)][x] = 0;
board[i][j] = '.';
}
}
}
return false;
}
}
递归生成数独java_[leetcode] 37. 解数独(Java)(dfs,递归,回溯)相关推荐
- Java实现 LeetCode 37 解数独
37. 解数独 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实 ...
- LeetCode—37. 解数独(困难)
37. 解数独(困难) 题目描述: 编写一个程序,通过填充空格来解决数独问题. 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 ...
- leetcode 37. 解数独 思考分析
目录 题目 核心思路的不断细化 1.核心框架 2.考虑到每个位置的工作 3.考虑到到达最后一列.该位置的数已经预置的情况 4.判断是否符合规则的函数 5.确定递归终止条件+确定函数返回值 AC代码 题 ...
- LintCode 802. 数独(回溯)/ LeetCode 37. 解数独
1. 题目 编写一个程序,通过填充空单元来解决数独难题. 空单元由数字0表示. 你可以认为只有一个唯一的解决方案. LeetCode 37 题类似,把 int 改成 char,注意转换 2. 解题 行 ...
- LeetCode 37. 解数独
一.题目描述 编写一个程序,通过填充空格来解决数独问题. 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 ...
- LeetCode 37. 解数独 Sudoku Solver
编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 3x3 ...
- LeetCode 37 解数独
题目描述 编写一个程序,通过填充空格来解决数独问题.一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 3x ...
- Leetcode算法Java全解答--37. 解数独
Leetcode算法Java全解答–37. 解数独 文章目录 Leetcode算法Java全解答--37. 解数独 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 编写一个 ...
- LeetCode高频题37. 解数独
LeetCode高频题37. 解数独 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们在公司养了一大批ACM竞赛的 ...
最新文章
- pandas读取csv文件发生编码(encoding)错误:获取文件编码格式之后再读取文件
- LibreOJ #113. 最大异或和
- MongoDB 里面日期查询的问题
- cocos2d-x初探学习笔记(16)--LayerColor
- AD9516/AD9517时钟芯片寄存器参数配置说明
- java部署平台_开源Java自动化部署平台JDeploy
- 为Lucene选择快速唯一标识符(UUID)
- python生成安装程序_python生成安装文件 msi
- NVIDIA 修复 GPU 驱动中的多个代码执行缺陷
- 编程语言-Python-GUI
- 敬请注册4月14日边缘计算Meetup(上海站)
- mir2disease:miRNA相关疾病数据库
- oracle ocp考题,Oracle OCP认证考试题库更新,052新考题整理(带答案)-72
- python给excel排序_python初学—-实现excel里面读数据进行排序
- java 创建Reader_BufferedReader类的对象建立问题(JAVA语言)
- 苹果亮度自动调节怎么关闭_笔记本黑苹果系统亮度调节驱动
- RationalDMIS 2020 叶片检测 -快速定义叶片截面线方法
- 【演讲实录+视频】走近40+世界级AI专家!第三届中国人工智能大会资料分享(直播进行中_不断更新)
- 如何在C语言中把int*转化为char*
- 开启Maven使用之路
热门文章
- Programming Computer Vision with Python (学习笔记十二) 1
- 找单词(母函数问题)
- Pl/SQL Developer 配置
- Citrix XenDesktop中VDA无法注册到DDC案例分享(一)
- [翻译:ASP.NET MVC 教程]理解模型、视图和控制器
- OJ1042: 数列求和3(递推思想)
- ajax post 变options,关于ajax:JQuery POST请求转换为OPTIONS。 为什么?
- tcount在哪个文件里_办公软件技巧:一键获取文件名称
- 财务管理c语言oj,九度OJ 1141:Financial Management (财务管理) (平均数)
- matlab1分钟数据转5分钟,把股票的5分钟k线数据转换成matlab的day文件