[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;
}
}
[leetcode] 37. 解数独(Java)(dfs,递归,回溯)的更多相关文章
- Java实现 LeetCode 37 解数独
37. 解数独 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实 ...
- leetcode 36 有效的数独 哈希表 unordered_set unordersd_map 保存状态 leetcode 37 解数独
leetcode 36 感觉就是遍历. 保存好状态,就是各行各列还有各分区divide的情况 用数组做. 空间小时间大 class Solution { public: bool isValidSud ...
- Leetcode——37.解数独 [##]
@author: ZZQ @software: PyCharm @file: leetcode37_solveSudoku.py @time: 2018/11/20 16:41 思路:递归回溯 首先, ...
- Leetcode之回溯法专题-37. 解数独(Sudoku Solver)
Leetcode之回溯法专题-37. 解数独(Sudoku Solver) 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次.数字 1 ...
- [leetcode] 39. 组合总和(Java)(dfs、递归、回溯)
39. 组合总和 直接暴力思路,用dfs+回溯枚举所有可能组合情况.难点在于每个数可取无数次. 我的枚举思路是: 外层枚举答案数组的长度,即枚举解中的数字个数,从1个开始,到target/ min(c ...
- leetcode刷题-37解数独
题目 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次.数字 1-9 在每一列只能出现一次.数字 1-9 在每一个以粗实线分隔的 3x ...
- 【LeetCode】解数独
做题之前先复习下[STL中的Tuple容器] 我们知道,在Python中,大家都知道tuple这个概念,是一个只读的元素容器,容器内的元素数据类型可以不同,而在CPP中大部分的容器只能储存相同数据类型 ...
- [LeetCode] Combinations (bfs bad、dfs 递归 accept)
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl ...
- leetcode 37 Sudoku Solver java
求数独,只要求做出一个答案就可以. 刚开始对题意理解错误,以为答案是唯一的, 所以做了很久并没有做出来,发现答案不唯一之后,使用回溯.(还是借鉴了一下别人) public class Solution ...
随机推荐
- Mybatis(一)Porxy动态代理和sql解析替换
JDK常用核心原理 概述 在 Mybatis 中,常用的作用就是讲数据库中的表的字段映射为对象的属性,在进入Mybatis之前,原生的 JDBC 有几个步骤:导入 JDBC 驱动包,通过 Driver ...
- php 操作 redis 常用命令
原文地址: https://www.cnblogs.com/zhanghanwen16/p/9510481.html 1.redis连接与认证 //连接参数:ip.端口.连接超时时间,连接成功返回tr ...
- hdu4530 水题
题意: 小Q系列故事--大笨钟 Time Limit: 600/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total ...
- layui中富文本编辑器LayEdit的使用
html部分: <textarea id="demo" style="display: none;"></textarea>js部分:& ...
- 【Mybatis源码解析】- 整体架构及原理
整体架构 version-3.5.5 在深入了解Mybatis的源码之前,我们先了解一下Mybatis的整体架构和工作原理,这样有助于我们在阅读源码过程中了解思路和流程. 核心流程 在上一遍的入门程序 ...
- python爬虫——汽车之家数据
相信很多买车的朋友,首先会在网上查资料,对比车型价格等,首选就是"汽车之家",于是,今天我就给大家扒一扒汽车之家的数据: 一.汽车价格: 首先获取的数据是各款汽车名称.价格范围以及 ...
- algorithm库介绍之---- stable_sort()方法 与 sort()方法 .
文章转载自:http://www.cnblogs.com/ffhajbq/archive/2012/07/24/2607476.html 关于stable_sort()和sort()的区别: 你发现有 ...
- 发布声明$\beta$
一.新功能 \(\beta\)阶段集中开发了3大核心功能:支持模块的嵌套.模型市场.模型推理,这三项基本上都是从零开始.徒手开发的功能,没有轮子可以参照,因此也不具有可以对比的先前版本. 除此之外,开 ...
- OO_Unit1_表达式求导
CSDN链接 一.第一次作业 1.需求分析 简单多项式导函数 带符号整数 支持前导0的带符号整数,符号可省略,如: +02.-16.19260817等. 幂函数 一般形式 由自变量x和指数组成,指数为 ...
- 透过“锁”事看InnoDB对并发的处理?
一. 并发场景下的问题 相对于串行处理方式,并发的事务处理可显著提升数据库的事务吞吐量.提高资源利用率.在MySQL实际应用中,根据场景的不同,可以分为以下几类: 读读并发 读写并发 写写并发 在这些 ...