Valid sudoku, 是否是有效的数独
问题描述:给定9x9矩阵,看是是否是有效数独,不用全部都填上数字,可以为.
算法分析:这道题就是判断,不难,有效数独三个充分条件,行,列,3*3子矩阵,都要满足数字不能重复。
public boolean isValidSudoku(char[][] board)
{
if(board == null || board.length != 9 || board[0].length != 9)
{
return false;
} //判断行
for(int i = 0; i < 9; i ++)
{
boolean[] m = new boolean[9];
for(int j = 0; j < 9; j ++)
{
if(board[i][j] != '.')
{
//if(m[(int)board[i][j]])这样写是错误的,因为(int)'1'不等于1.
if(m[(int)(board[i][j]-'1')])
{
return false;
}
m[(int)(board[i][j]-'1')] = true;
}
}
} //判断列
for(int i = 0; i < 9; i ++)
{
boolean[] m = new boolean[9];
for(int j = 0; j < 9; j ++)
{
if(board[j][i] != '.')
{
if(m[(int)(board[j][i]-'1')])
{
return false;
}
m[(int)(board[j][i]-'1')] = true;
}
}
} //判断3*3矩阵,总共有9个
for(int k = 0; k < 9; k ++)
{
boolean[] m = new boolean[9];
for(int i = k/3*3; i < k/3*3 + 3; i ++)
{
for(int j = k%3*3; j < k%3*3 + 3; j ++)
{
if(board[i][j] != '.')
{
if(m[(int)(board[i][j]-'1')])
{
return false;
}
m[(int)(board[i][j]-'1')] = true;
}
}
}
} return true;
}
还有一种方法,就是直接用set集合,判断元素是否重复。
public boolean isValidSudoku(char[][] board) {
for(int i = 0; i < 9; i ++)
{
Set<Character> set = new HashSet<>();
for(int j = 0; j < 9; j ++)
{
if(board[i][j] != '.')
{
if(set.contains(board[i][j]))
{
return false;
}
set.add(board[i][j]);
}
}
set.clear();
}
for(int i = 0; i < 9; i ++)
{
Set<Character> set = new HashSet<>();
for(int j = 0; j < 9; j ++)
{
if(board[j][i] != '.')
{
if(set.contains(board[j][i]))
{
return false;
}
set.add(board[j][i]);
}
}
set.clear();
}
for(int k = 0; k < 9; k ++)
{
Set<Character> set = new HashSet<>();
for(int j = k/3*3; j < k/3*3+3; j ++)
{
for(int i = k%3*3; i < k%3*3+3; i ++)
{
if(board[j][i] != '.')
{
if(set.contains(board[j][i]))
{
return false;
}
set.add(board[j][i]);
}
}
}
set.clear();
}
return true;
}
Valid sudoku, 是否是有效的数独的更多相关文章
- 36. Valid Sudoku 判断九九有效的数独
[抄题]: Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according ...
- LeetCode:Valid Sudoku,Sudoku Solver(数独游戏)
Valid Sudoku Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku bo ...
- LeetCode:36. Valid Sudoku,数独是否有效
LeetCode:36. Valid Sudoku,数独是否有效 : 题目: LeetCode:36. Valid Sudoku 描述: Determine if a Sudoku is valid, ...
- leetcode 37. Sudoku Solver 36. Valid Sudoku 数独问题
三星机试也考了类似的题目,只不过是要针对给出的数独修改其中三个错误数字,总过10个测试用例只过了3个与世界500强无缘了 36. Valid Sudoku Determine if a Sudoku ...
- valid sudoku(数独)
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...
- leetCode 36.Valid Sudoku(有效的数独) 解题思路和方法
Valid Sudoku Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku bo ...
- LeetCode 36 Valid Sudoku
Problem: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board ...
- 36. Valid Sudoku
============= Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku b ...
- 【LeetCode题意分析&解答】36. Valid Sudoku
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...
随机推荐
- windows 全角 怎么切换到半角
windows 全角 怎么切换到半角 :shift+空格键
- 【我的Android进阶之旅】解决 Error:CreateProcess error=216, 该版本的 %1 与您运行的 Windows 版本不兼容。请查看计算机的系统信息,了解是否需要 x86
一.错误描述 刚刚打开Android Studio新建一个项目,然后就编译不了,报了如下所示的错误: 错误描述为: Error:CreateProcess error=216, 该版本的 %1 与您运 ...
- git学习------>如何用git log命令来查看某个指定文件的提交历史记录
有时候接手一份新代码时,看到某些文件的改动,但不清楚这个改动的作者和原因,想查看该文件的具体提交历史记录. 今天一个同事是这样做的,直接敲git log命令,然后再使用vim命令的搜索关键字的方法来查 ...
- mysql 建立表之间关系 练习 1
练习:账号信息表,用户组,主机表,主机组 #用户表 mysql> create table user( id int not null unique auto_increment, userna ...
- 请教Hibernate和JPA什么区别?
JPA是Java的持久化规范.Hibernate早期是一个ORM框架,后期是JPA的一个实现.
- java 自制Tomcat Andorid IOS 端 证书
java 自制证书 最近做项目用到Https 需要自制各种证书,Tomcat 用的JKS 格式, Andorid 端使用 BKS 格式, IOS 端使用 P12格式正式, 以及各种证书格式之间的转换. ...
- [StringUtil ] isEmpty VS isBlank
昨天才意识到这两个的存在. Blank(空字符串 blank) StringUtils.isNoneBlank(null) = false StringUtils.isNoneBlank(null, ...
- Maven项目settings.xml的配置
原文地址 http://www.cnblogs.com/DreamDrive/p/5571916.html 在Maven中提供了一个settings.xml文件来定义Maven的全局环境信息.这个文件 ...
- django-admin自定义登录
这个效果,单位代码是User model 的一个外键Company 通过修改form,然后在前端显示 修改form class AuthenticationForm(forms.Form): &quo ...
- 微信小程序将带来web程序员的春天!
微信之父张小龙在年初那次演讲中曾表示:“我自己是很多年的程序员,我觉得我们应该为开发的团体做一些事情.”几个月后,微信正式推出微信应用号(即微信小程序)在互联网中掀起又一波热潮. 过去,对于很多开发者 ...