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 ...
随机推荐
- Spring Cloud Feign组件
采用Spring Cloud微服务框架后,经常会涉及到服务间调用,服务间调用采用了Feign组件. 由于之前有使用dubbo经验.dubbo的负载均衡策略(轮训.最小连接数.随机轮训.加权轮训),du ...
- pc端和移动端的区别
以下都是自己的个人理解,说错了希望大家多交流交流.1,普通pc端开发与移动端开发区别.普通pc端开发,我理解就是你拿电脑打开的网页都算[这相信大部分人都知道].那么移动端开发工程师,说白了就很好理解了 ...
- 国内java,oa,weixin opensource framework www.jeecg.org
Soap/rest 为API生,为框架死,为Debug奋斗一辈子!吃符号的亏,上大小写的当,最后死在需求上!
- 2015-04-14——css3 @media
//判断横竖屏 @media screen and (min-aspect-ratio: 13/13) { body {background-color:red;}} //屏幕宽高比,必须是除数形式 ...
- 基于Requests和BeautifulSoup实现“自动登录”
基于Requests和BeautifulSoup实现“自动登录”实例 自动登录抽屉新热榜 #!/usr/bin/env python # -*- coding:utf-8 -*- import req ...
- 简述 Python3 文件处理
1.文件处理 找到文件 --> 打开文件 --> 操作:读.写 --> 保存 --> 关闭 1.1.1 写文件 (只要牵扯到文件操作,都是字符串:写文件的时候需要把写的数字转换 ...
- Scrapy框架-scrapy框架架构详解
1.Scrapy框架介绍 写一个爬虫,需要做很多的事情.比如:发送网络请求.数据解析.数据存储.反反爬虫机制(更换ip代理.设置请求头等).异步请求等.这些工作如果每次都要自己从零开始写的话,比较浪费 ...
- Tomcat的session
创建session 在具体说明session的创建过程之前,先看一下BS访问模型: browser发送Http request: tomcat内核Http11Processor会从HTTP requ ...
- ORACLE性能优化- Buffer cache 的调整与优化
Buffer Cache是SGA的重要组成部分,主要用于缓存数据块,其大小也直接影响系统的性能.当Buffer Cache过小的时候,将会造成更多的 free buffer waits事件. 下面将具 ...
- Python Network Programming
@1: 同步网络编程(也就是阻塞方式) 同步网络编程一次只能连接一个客户端. Server端: import socket def debugPrint(name, value): print(&qu ...