LeetCode-37.解数独
编写一个程序,通过已填充的空格来解决数独问题。
一个数独的解法需遵循如下规则:
- 数字
1-9
在每一行只能出现一次。 - 数字
1-9
在每一列只能出现一次。 - 数字
1-9
在每一个以粗实线分隔的3x3
宫内只能出现一次。
空白格用 '.'
表示。
Note:
- 给定的数独序列只包含数字
1-9
和字符'.'
。 - 你可以假设给定的数独只有唯一解。
- 给定数独永远是
9x9
形式的。
做题的时候,思路有了,但是代码小问题比较多,改了也挺久。
class Solution {
public void solveSudoku(char[][] board) {
solveSudoku(board,0,0);
}
public boolean solveSudoku(char[][] board,int i,int j) {
for(int ii=0;ii<9;ii++)
for(int jj=0;jj<9;jj++){
if(ii<i&&jj<j)
continue;
//找出需要填写的空格
if(board[ii][jj]=='.'){
//从1到10逐个填入测试
for(int n=1;n<10;n++){
board[ii][jj]=(char)(n+48);
//若该数字满足数独规则时,返回true
if(checki(board,ii,jj)&&checkj(board,ii,jj)&&checkij(board,ii,jj)
&&solveSudoku(board,ii+(jj+1)/9,(jj+1)%9)) return true;
}
//若全都不满足时,填回'.''
board[ii][jj]='.';
return false;
}
}
return true;
}
//检查横
private boolean checki(char[][] b,int i,int j){
char tmp=b[i][j];
for(int n=0;n<9;n++){
if(b[i][n]==tmp&&n!=j)
return false;
}
return true;
}
//检查竖
private boolean checkj(char[][] b,int i,int j){
char tmp=b[i][j];
for(int n=0;n<9;n++){
if(b[n][j]==tmp&&n!=i)
return false;
}
return true;
}
//检查方格
private boolean checkij(char[][] b,int i,int j){
char tmp=b[i][j];
int m=(i/3)*3;
int n=(j/3)*3;
for(int mm=m;mm<m+3;mm++){
for(int nn=n;nn<n+3;nn++){
if(b[mm][nn]==tmp&&i!=mm&&j!=nn)
return false;
}
}
return true;
}
}
LeetCode-37.解数独的更多相关文章
- Java实现 LeetCode 37 解数独
37. 解数独 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实 ...
- [leetcode] 37. 解数独(Java)(dfs,递归,回溯)
37. 解数独 1A 这个题其实15分钟左右就敲出来并且对了...但是由于我输错了一个数..导致我白白debug一个多小时.. 没啥难度,练递归-dfs的好题 class Solution { pri ...
- 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刷题-37解数独
题目 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次.数字 1-9 在每一列只能出现一次.数字 1-9 在每一个以粗实线分隔的 3x ...
- 【LeetCode】解数独
做题之前先复习下[STL中的Tuple容器] 我们知道,在Python中,大家都知道tuple这个概念,是一个只读的元素容器,容器内的元素数据类型可以不同,而在CPP中大部分的容器只能储存相同数据类型 ...
- [leetcode]37. Sudoku Solver 解数独
Write a program to solve a Sudoku puzzle by filling the empty cells. A sudoku solution must satisfy ...
- [LeetCode] Sudoku Solver 解数独,递归,回溯
Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...
- LeetCode37 使用回溯算法实现解数独,详解剪枝优化
本文始发于个人公众号:TechFlow,原创不易,求个关注 数独是一个老少咸宜的益智游戏,一直有很多拥趸.但是有没有想过,数独游戏是怎么创造出来的呢?当然我们可以每一关都人工设置,但是显然这工作量非常 ...
随机推荐
- 过滤掉URL中的参数部分
//将超链接的参数部分滤掉 ?xxx if(url.contains("?")){ url=url.substring(0,url.indexOf("?")); ...
- 使用 jekyll + github pages 搭建个人博客
1. 新建 github.io 项目 其实 github pages 有两个用途,大家可以在官方网页看到.其中一个是作为个人/组织的主页(每个账号只能有一个),另一个是作为 github 项目的项目主 ...
- 团队作业——Alpha冲刺 12/12
团队作业--Alpha冲刺 冲刺任务安排 杨光海天 今日任务:自定义保存界面布局以及交互接口函数的实现 明日任务:总结项目中的问题,为什么没能按照预期推进项目 郭剑南 今日任务:继续解决Python编 ...
- 团队作业6--展示博客(Alpha版本)
一.团队展示: 1.队名:软件1412--博客管理系统 2.队员学号(标记组长) 曾海明(组长):201421122036 周雅静(组员):201421122003 王珏(组员):2014211 ...
- 不能用c99的情况下,如何动态定义数组的长度
#include <stdio.h>#include <stdlib.h> int main(int argc, char const *argv[]){ int num ...
- linux 的常用命令---------第三阶段
用户管理 为什么需要用户? 答:linux是一个多用户系统 权限管理(使之权限最小化) 用户:它是对系统中的资源做归属的 : 用户组:在用户组中包含一个或者多个用户,每个用户都同时拥有用户组的权限. ...
- java通过反射调用有参数的方法
public static void eachCfg(Class Initclass,String taskType){ Field[] fields = Initclass.getDeclaredF ...
- jsp el的内置对象
一.el内置对象(11个): pageScope (掌握) requestScope (掌握) applicationScope (掌握) sessionScope (掌握) param (了解) p ...
- *p++,*++p,*(p++),*(++p)
直接上代码: #include <stdio.h> #include <stdlib.h> int main () { ,,,}; ; int *p, *tmp; p = &a ...
- XML 的4种解析方式
在上一篇博客中,我们介绍了什么是 XML ,http://www.cnblogs.com/ysocean/p/6901008.html,那么这一篇博客我们介绍如何来解析 XML . 部分文档引用:ht ...