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 ...
随机推荐
- 状态模式、职责链模式——省去if-else的繁琐结构
小时候写日记都是这么写的:上午七点起床,八点之前洗脸刷牙吃早饭,十二点之前好好上课,中午一点,吃午饭,下午两点到六点,上课,下课,找请假,明天妈妈要带我去姥姥家,九点之前,看动画片,九点钟,收拾去姥姥 ...
- Gradle 1.12用户指南翻译——第四十八章. Wrapper 插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Bootstrap3 排版-页面主体
Bootstrap 将全局 font-size 设置为 14px,line-height 设置为 1.428.这些属性直接赋予 元素和所有段落元素.另外,<p> (段落)元素还被设置了等于 ...
- LOG4J日志级别详解
日志记录器(Logger)是日志处理的核心组件. org.apache.log4j.Level类提供以下级别,但也可以通过Level类的子类自定义级别. Level 描述 ALL 各级包括自定义级别 ...
- Objective-C与Java类的一些区别
Objective-C与Java类的一些区别 OC类和C一样,需要有声明和定义,先上一段OC代码 #import <Foundation/Foundation.h> /* * 声明一个Pe ...
- Support Annotation Library使用详解
概述 Support Annotation Library是在Android Support Library19.1版本开始引入的一个全新的函数包,它包含了诸多有用的元注解.用来帮助开发者在编译期间发 ...
- Android Studio中Git的配置及协同开发
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51595096 本文出自:[openXu的博客] 目录: 一 Android Stutio配置 ...
- Android Multimedia框架总结(七)C++中MediaPlayer的C/S架构补充及MediaService介绍
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼,文章链接: http://blog.csdn.net/hejjunlin/article/details/52465168 前面一篇主要介绍 ...
- Android之自定义AlertDialog和PopupWindow实现(仿微信Dialog)
我们知道,在很多时候,我们都不用Android内置的一些控件,而是自己自定义一些自己想要的控件,这样显得界面更美观. 今天主要是讲自定义AlertDialog和popupWindow的使用,在很多需求 ...
- Nhibernate系列学习之(一) ORM and Nhibernate入门实例解析
最近框架项目需要,数据层想使用Nhibernate,代替传统的sql语句的写法,更加使用面向对象的思维来维护实体与数据库的这层关系映射(ORM),好在之前接触过Java时学习使用了Hibernate, ...