Leetcode36--->Valid Sudoku(判断给定的数独是否有效)
题目:给定一个数独,某些部分已经被填上了数字,其余空的地方用‘.’表示;判断给定的数独是否有效;
数独规则: 每一行不能有重复的数字;每一列不能有重复的数字;将数独框划分为三行三列,没9个小方格不能有重复;
![]()
解题思路:
该题目不要判断整个数独是否有解,只需要判断当前给出的数独是否有效。因此只需要判断行和列是否有效,判断每个块是否有效。而判断一行中是否有重复的数字,最好的数据结构莫过于Set结构了。
使用rowSet,colSet两个Set结构来分别保存当前遍历的行和列,(i, j)表示行,则(j, i)就表示列。因此可以在判断第一行是否有效的同时,顺便判断第一列是否有效;块单独做检查;
代码如下:
public class Solution {
public boolean isValidSudoku(char[][] board) {
if(board == null || board.length < 9 || board[0].length < 9)
return false;
Set<Character> rowset = new HashSet<Character>();
Set<Character> colset = new HashSet<Character>();
for(int i = 0; i < 9; i++)
{
rowset.clear();
colset.clear();
for(int j = 0; j < 9; j ++)
{
if(i % 3 == 0 && j % 3 == 0) // 检查块是否有效
{
if(!checkBlock(board, i, j))
return false;
}
if(board[i][j] != '.') // 检查行是否有效
{
if(rowset.contains(board[i][j]))
return false;
rowset.add(board[i][j]);
}
if(board[j][i] != '.') // 检查列是否有效
{
if(colset.contains(board[j][i]))
return false;
colset.add(board[j][i]);
}
}
}
return true;
}
public boolean checkBlock(char[][] board, int row, int col) // 检查块是否有效
{
Set<Character> blockSet = new HashSet<Character>();
for(int i = row; i < row + 3; i++)
{
for(int j = col; j < col + 3; j++)
{
if(board[i][j] != '.')
{
if(blockSet.contains(board[i][j]))
return false;
blockSet.add(board[i][j]);
}
}
}
return true;
}
}
Leetcode36--->Valid Sudoku(判断给定的数独是否有效)的更多相关文章
- leetcode36. Valid Sudoku
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...
- lintcode:Valid Sudoku 判断数独是否合法
题目: 判断数独是否合法 请判定一个数独是否有效.该数独可能只填充了部分数字,其中缺少的数字用 . 表示. 样例 下列就是一个合法数独的样例. 注意 一个合法的数独(仅部分填充)并不一定是可解的.我们 ...
- 36. Valid Sudoku 判断九九有效的数独
[抄题]: Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according ...
- Leetcode36.Valid Sudoku有效的数独
判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 ...
- LeetCode解题报告—— Search in Rotated Sorted Array & Search for a Range & Valid Sudoku
1. Search in Rotated Sorted Array Suppose an array sorted in ascending order is rotated(轮流,循环) at so ...
- 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, ...
- valid sudoku(数独)
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...
- leetcode 37. Sudoku Solver 36. Valid Sudoku 数独问题
三星机试也考了类似的题目,只不过是要针对给出的数独修改其中三个错误数字,总过10个测试用例只过了3个与世界500强无缘了 36. Valid Sudoku Determine if a Sudoku ...
随机推荐
- /usr/local/sbin/fping -s www.baidu.com www.google.com
/usr/local/sbin/fping -s www.baidu.com www.google.com
- Python+selenium之测试报告(1)
一.下载HTMLTestRunner.py HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展.它生成易于使用的 HTML 测试报告.HTMLTestRunne ...
- HTML 中的特殊字符
空格符 <小于号 < >大于号 > &和好 & ¥人民币 ¥ © 版权 © ® 注册商标 ® ℃ 摄氏度 ° ...
- 解决Layui的switch样式显示问题
Layui官方文档是这么说的: <input type="checkbox" name="xxx" lay-skin="switch" ...
- jsp跳转标签<jsp:forward>
forward.jsp <%@ page language="java" contentType="text/html; charset=utf-8" p ...
- AHK进阶之路
本文摘自 http://www.cnblogs.com/echorep/p/4911117.html 小鸟学AHK(1)之运行程序或打开文档 AHK就是AutoHotKey,是一款免费的.Wind ...
- 如何处理SAP云平台错误消息 there is no compute unit quota for subaccount
当我试图部署一个应用到SAP云平台的neo环境时: 指定Compute Unit Size为Lite: 点击Deploy按钮,遇到如下错误消息:there is no compute unit quo ...
- linux yum安装指定版本mysql
1.下载mysql rpm包 cd /usr/local/src wget https://dev.mysql.com/get/mysql80-community-release-el7-.noarc ...
- Vector 容器简单介绍
# Vector STL简要介绍 关于STL中的vector容器,以下做一些相关介绍. #### vector 简要概述 vector 称作向量类,属于容器类,实现了动态的数组,用于元素数量变化的对象 ...
- 【转】绝对不要在树莓派上使用无源的HDMI→VGA视频转换器
http://www.guokr.com/post/521521/ 树莓派由于BCM2835的限制,仅有HDMI和复合视频两种输出形式.所以对于使用VGA显示器的广大用户,HDMI转VGA转换器就成了 ...