Leetcode_36_Valid Sudoku
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42528601
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
The Sudoku board could be partially filled, where empty cells are filled with the character '.'.
![]()
A partially filled sudoku which is valid.
Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.
思路:
(1)题意为判断一个数独是否有效。
(2)题意不是让我们求解出整个数独(当然,如果真的求解还是很复杂的),而是判断数独中已有数据是否有效。
(3)本文的思路还是暴力破解,因为没有想到其它好的方法。对数独对应的9*9的二维数组进行遍历,对于任意一个不为'.'的数字,都需要对其所在的行、列、以及3*3的块区域进行判断,如果有重复出现的情况,那么数独就是无效的,具体见下方代码。
(4)希望本文对你有所帮助。
算法代码实现如下:
public boolean isValidSudoku(char[][] board) {
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
char curr = board[i][j];
if(curr=='.'){
continue;
}
//行
for (int k = j+1; k < board.length; k++) {
if(curr==board[i][k]){
return false;
}
}
//列
for (int k = i+1; k < board.length; k++) {
if(curr==board[k][j]){
return false;
}
}
//3*3 方块
if(i>=0&&i<3&&j>=0&&j<3){
int count=0;
for (int k1 = 0; k1 < 3; k1++) {
for (int k2 = 0; k2 < 3; k2++) {
if(board[k1][k2]==curr){
count++;
}
if(count>1) return false;
}
}
}
if(i>=0&&i<3&&j>=3&&j<6){
int count=0;
for (int k1 = 0; k1 < 3; k1++) {
for (int k2 = 3; k2 < 6; k2++) {
if(board[k1][k2]==curr){
count++;
}
if(count>1) return false;
}
}
}
if(i>=0&&i<3&&j>=6&&j<9){
int count=0;
for (int k1 = 0; k1 < 3; k1++) {
for (int k2 = 6; k2 < 9; k2++) {
if(board[k1][k2]==curr){
count++;
}
if(count>1) return false;
}
}
}
if(i>=3&&i<6&&j>=0&&j<3){
int count=0;
for (int k1 = 3; k1 < 6; k1++) {
for (int k2 = 0; k2 < 3; k2++) {
if(board[k1][k2]==curr){
count++;
}
if(count>1) return false;
}
}
}
if(i>=3&&i<6&&j>=3&&j<6){
int count=0;
for (int k1 = 3; k1 < 6; k1++) {
for (int k2 = 3; k2 < 6; k2++) {
if(board[k1][k2]==curr){
count++;
}
if(count>1) return false;
}
}
}
if(i>=3&&i<6&&j>=6&&j<9){
int count=0;
for (int k1 = 3; k1 < 6; k1++) {
for (int k2 = 6; k2 < 9; k2++) {
if(board[k1][k2]==curr){
count++;
}
if(count>1) return false;
}
}
}
if(i>=6&&i<9&&j>=0&&j<3){
int count=0;
for (int k1 = 6; k1 < 9; k1++) {
for (int k2 = 0; k2 < 3; k2++) {
if(board[k1][k2]==curr){
count++;
}
if(count>1) return false;
}
}
}
if(i>=6&&i<9&&j>=3&&j<6){
int count=0;
for (int k1 = 6; k1 < 9; k1++) {
for (int k2 = 3; k2 < 6; k2++) {
if(board[k1][k2]==curr){
count++;
}
if(count>1) return false;
}
}
}
if(i>=6&&i<9&&j>=6&&j<9){
int count=0;
for (int k1 = 6; k1 < 9; k1++) {
for (int k2 = 6; k2 < 9; k2++) {
if(board[k1][k2]==curr){
count++;
}
if(count>1) return false;
}
}
}
}
}
return true;
}
Leetcode_36_Valid Sudoku的更多相关文章
- Leetcode 笔记 36 - Sudoku Solver
题目链接:Sudoku Solver | LeetCode OJ Write a program to solve a Sudoku puzzle by filling the empty cells ...
- [LeetCode] Sudoku Solver 求解数独
Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...
- [LeetCode] Valid Sudoku 验证数独
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...
- LeetCode 36 Valid Sudoku
Problem: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board ...
- 【leetcode】Valid Sudoku
题目简述: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board cou ...
- ACM : POJ 2676 SudoKu DFS - 数独
SudoKu Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu POJ 2676 Descr ...
- ACM: ICPC/CCPC Sudoku DFS - 数独
Sudoku Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/65535K (Java/Other) Total Submis ...
- Leetcode: Sudoku Solver
July 19, 2015 Problem statement: Write a program to solve a Sudoku puzzle by filling the empty cells ...
- Leetcode Valid Sudoku
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...
随机推荐
- MacOS下postgresql数据库密码的那些事
如果你是第一次玩postgresql数据库,你会发现你给role或者user明明设置了密码,但在登录的时候毛都不用输入,直接就进去了,怎么那么爽快!? 虽然爽快,但貌似不该这样啊. 其实这些都和一个重 ...
- RxJava(11-线程调度Scheduler)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51821940 本文出自:[openXu的博客] 目录: 使用示例 subscribeOn原理 ...
- springMVC源码分析--AbstractUrlHandlerMapping(三)
上一篇博客springMVC源码分析--AbstractHandlerMapping(二)中我们介绍了AbstractHandlerMapping了,接下来我们介绍其子类AbstractUrlHand ...
- 自定义progressDialog(数据加载框)的实现
大家在开发客户端时基本上都需要获取数据,在获取数据时会有一个等待状态,这时我们可以利用系统自带的progressDialog来向用户展示"数据正在加载中..."等等,但有时我们会觉 ...
- [Matlab]技巧笔记
1.将字符串作为Matlab命令执行 md = 'dir'; eval(md); 2.将字符串作为系统命令执行 md = 'dir'; system(md); 3.使显示图像的坐标轴使用相同的度量单位 ...
- ZAB协议
zookeeper依赖zab协议来实现分布式数据一致性.基于该协议,zookeeper实现了一种主备模式的系统架构来保持ZooKeeper为高可用的一致性协调框架,自然的ZooKeeper也有着一致性 ...
- 19 主线程向子线程发送信息(handler)
package com.fmy.handler; import android.app.Activity; import android.os.Bundle; import android.os.Ha ...
- 【安卓开发】Facebook工程师是如何改进他们Android客户端的
原文出处: Facebook 译文出处:penkzhou 欢迎分享原创到伯乐头条 作为世界上最大的社交网络,Facebook的Android客户端面临着各种各样的使用环境(地理环境.Andro ...
- iOS集合视图单元格高亮和选中的区别
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交 ...
- scala for spark
写了点scala的内容,方便看spark源码,估计一两天就能看完,内容比较粗浅. 下载地址: http://download.csdn.net/detail/lsshlsw/7983541