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,递归,回溯)相关推荐

  1. Java实现 LeetCode 37 解数独

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

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

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

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

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

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

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

  5. LeetCode 37. 解数独

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

  6. LeetCode 37. 解数独 Sudoku Solver

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

  7. LeetCode 37 解数独

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

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

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

  9. LeetCode高频题37. 解数独

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

最新文章

  1. pandas读取csv文件发生编码(encoding)错误:获取文件编码格式之后再读取文件
  2. LibreOJ #113. 最大异或和
  3. MongoDB 里面日期查询的问题
  4. cocos2d-x初探学习笔记(16)--LayerColor
  5. AD9516/AD9517时钟芯片寄存器参数配置说明
  6. java部署平台_开源Java自动化部署平台JDeploy
  7. 为Lucene选择快速唯一标识符(UUID)
  8. python生成安装程序_python生成安装文件 msi
  9. NVIDIA 修复 GPU 驱动中的多个代码执行缺陷
  10. 编程语言-Python-GUI
  11. 敬请注册4月14日边缘计算Meetup(上海站)
  12. mir2disease:miRNA相关疾病数据库
  13. oracle ocp考题,Oracle OCP认证考试题库更新,052新考题整理(带答案)-72
  14. python给excel排序_python初学—-实现excel里面读数据进行排序
  15. java 创建Reader_BufferedReader类的对象建立问题(JAVA语言)
  16. 苹果亮度自动调节怎么关闭_笔记本黑苹果系统亮度调节驱动
  17. RationalDMIS 2020 叶片检测 -快速定义叶片截面线方法
  18. 【演讲实录+视频】走近40+世界级AI专家!第三届中国人工智能大会资料分享(直播进行中_不断更新)
  19. 如何在C语言中把int*转化为char*
  20. 开启Maven使用之路

热门文章

  1. Programming Computer Vision with Python (学习笔记十二) 1
  2. 找单词(母函数问题)
  3. Pl/SQL Developer 配置
  4. Citrix XenDesktop中VDA无法注册到DDC案例分享(一)
  5. [翻译:ASP.NET MVC 教程]理解模型、视图和控制器
  6. OJ1042: 数列求和3(递推思想)
  7. ajax post 变options,关于ajax:JQuery POST请求转换为OPTIONS。 为什么?
  8. tcount在哪个文件里_办公软件技巧:一键获取文件名称
  9. 财务管理c语言oj,九度OJ 1141:Financial Management (财务管理) (平均数)
  10. matlab1分钟数据转5分钟,把股票的5分钟k线数据转换成matlab的day文件