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 ...
随机推荐
- k8s Kubernetes v1.10 最简易安装 shell
k8s Kubernetes v1.10 最简易安装 shell # Master 单节点快速安装 # 最简单的安装shell,只为快速部署k8s测试环境 #环境centos 7.4 #1 初始化环境 ...
- 自定义Retrofit转化器Converter
我们来看一下Retrofit的使用 interface TestConn { //这里的Bitmap就是要处理的类型 @GET("https://ss0.baidu.com/73F1bjeh ...
- cassandra 概述
摘要 本篇文章主要是介绍cassandra与其他NoSQL的区别以及自身的特点与应用场景.在关系数据库我们没必要选择数据库,通常需要适配oracle/mysql/sql server/db2 等多种数 ...
- Core Python Programming一书中关于深浅拷贝的错误
该书关于深浅拷贝的论述: 6.20. *Copying Python Objects and Shallow and Deep Copies "when shallow copies are ...
- 【伯乐在线】Java线程面试题 Top 50
本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎加入翻译小组.转载请见文末要求. 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特 ...
- tomcat启动批处理——setclasspath.bat
除了上面两个批处理,还有一个比较重要的脚本,即是setclasspath.bat,它主要负责寻找.检查JAVA_HOME和JRE_HOME两个变量. ************************* ...
- 抽屉效果的实现(DrawerLayout和SlidingMenu的对比)
在做谷歌电子市场的时候用的是DrawerLayout实现的抽屉效果,在新闻客户端的时候用的是开源框架SlidingMenu来实现的,总的来说,各有个的优点,侧滑(开源框架)实现的效果更好,但是Draw ...
- Java进阶(四十一)多线程讲解
Java多线程讲解 前言 接到菜鸟网络的电话面试,面试官让自己谈一下自己对多线程的理解,现将其内容整理如下. 线程生命周期 Java线程具有五种基本状态 新建状态(New):当线程对象创建后,即进入了 ...
- TCP的发送系列 — 发送缓存的管理(一)
主要内容:TCP发送缓存的初始化.动态调整.申请和释放. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd 数据结构 TCP对发送缓存的管理是在两个层面上进 ...
- 用API给用户添加职责
DECLARE lc_user_name VARCHAR2(100) := 'PRAJ_TEST'; lc_resp_appl_short_name VARCHAR2(100) := 'FND' ...