给出一个二维数组,数组大小为数独的大小,即9*9 
其中,未填入数字的数组值为’.’
判断当前所给已知数组中所填的数字是否合法。
 
 
数独合法性判断:

1. 满足每一行的数字都只能是1~9,并且不能产生重复

2. 满足每一列的数字都只能是1~9,并且不能产生重复

3. 满足每一个3*3的正方形块中的数字只能是1~9,并且不能产生重复

 
 
判断过程:
初始化三个数组:row, column, cube 均为0
两层嵌套的循环,当遇到board数组中的不是’.’时,将board中的char转换为相对应的整数并且减去1
然后对每一行,每一列以及每一个3*3的正方形进行合法性判断. 
 
 
参考代码:
 
package leetcode_50;

import java.util.Arrays;

/***
*
* @author pengfei_zheng
* 判断数组是否合法
*/
public class Solution36 {
public static boolean isValidSudoku(char[][] board) {
int [][]row = new int[9][9];
int [][]column = new int[9][9];
int [][]cube = new int[9][9];
for(int i = 0 ; i < 9 ; i ++){
Arrays.fill(row[i],0);
Arrays.fill(column[i], 0);
Arrays.fill(cube[i], 0);
}
for(int i = 0 ; i < 9 ; i++){
for(int j = 0; j < 9 ; j++){
if(board[i][j]!='.'){
//tips: char转为对应的数字需要减去48 此处得到对一个数字并且减去1
int num = board[i][j]-49;
int k = i / 3 * 3 + j / 3;
//这里的num表示当前的在该行下是否已经填入过,如果该num已经使用过则返回
if(row[i][num]!=0 || column[j][num]!=0 || cube[k][num]!=0)
return false;
else
row[i][num] = column[j][num] = cube[k][num] = 1;
}
}
}
//只有当全部的判断均正常进行时,才能返回true
return true;
}
}

LeetCode 36 Valid Sudoku(合法的数独)的更多相关文章

  1. LeetCode:36. Valid Sudoku,数独是否有效

    LeetCode:36. Valid Sudoku,数独是否有效 : 题目: LeetCode:36. Valid Sudoku 描述: Determine if a Sudoku is valid, ...

  2. [LeetCode] 36. Valid Sudoku 验证数独

    Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to th ...

  3. [leetcode]36. Valid Sudoku验证数独

    Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to th ...

  4. leetCode 36.Valid Sudoku(有效的数独) 解题思路和方法

    Valid Sudoku Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku bo ...

  5. LeetCode 36 Valid Sudoku

    Problem: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board ...

  6. 蜗牛慢慢爬 LeetCode 36.Valid Sudoku [Difficulty: Medium]

    题目 Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could ...

  7. Java [leetcode 36]Valid Sudoku

    题目描述: Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board cou ...

  8. LeetCode 36. Valid Sudoku (Medium)

    题目 Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated according ...

  9. LeetCode 36. Valid Sudoku (C++)

    题目: Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according t ...

随机推荐

  1. HTTP 请求头与请求体 - 某熊的全栈之路 - SegmentFault

    本文从属于笔者的HTTP 理解与实践系列文章,对于HTTP的学习主要包含HTTP 基础.HTTP 请求头与请求体.HTTP 响应头与状态码.HTTP 缓存这四个部分,而对于HTTP相关的扩展与引申,我 ...

  2. 3D HTML5 Logo标志 超炫酷旋转特效

    今天又要为大家带来一款超酷的HTML5 Canvas 3D动画特效,是一款可以旋转的HTML5 Logo标志.画面上一共有两块可旋转的区域,第一是可旋转的背景,第二则是可旋转的Logo标志.Logo标 ...

  3. iOS:TabBarController 显示/隐藏第一级页面的TabBar

    - (void)setTabBarHidden:(BOOL)hidden { UIView *tab = self.tabBarController.view; ) { return; } UIVie ...

  4. struts实现国际化

    上篇博客学习了Java国际化的一些基础知识,了解了这些知识之后,我们可以更好的过度到struts国际化. 本篇博客主要学习struts国际化的实现: 1.配置环境设置baseName. 在struts ...

  5. Python之XML解析详解

    什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这 ...

  6. vim在系统剪切板的复制与粘贴

    https://blog.csdn.net/zhangxiao93/article/details/53677764

  7. logback.xml常用配置详解

    <?xml version="1.0" encoding="UTF-8"?><configuration debug="false& ...

  8. 数据注解特性--NotMapped

    NotMapped特性可以应用到领域类的属性中,Code-First默认的约定,是为所有带有get,和set属性选择器的属性创建数据列.. NotManpped特性打破了这个约定,你可以使用NotMa ...

  9. Tomcat------如何更改被IIS占用的80端口

    1.打开cmd,运行'netstat -ano'发现80端口被pid=4的进程占用 2.打开任务管理器,发现pid=4的进程,其实是system进程,其对应的进程描述是NT kernel & ...

  10. Jackson Gson Json.simple part 2

    这篇blog介绍 Jackson 的特点和使用方法 Jackson支持三种使用方法 流API(streaming api Incremental parsing/generation) JsonPar ...