给出一个二维数组,数组大小为数独的大小,即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. 按键精灵如何批量复制文本,再往excel里面一次性粘贴?

    原帖地址 http://zhidao.baidu.com/link?url=M2A9E1JF7wAzjtxMQG9uiW_PvP39HVlfwn6zDMzk9m6U05JA37SrgDcrVXg_c9 ...

  2. asp.net c# repeater或gridview导出EXCEL的详细代码。

    Response.Clear(); Response.Charset = "GB2312"; Response.ContentEncoding = System.Text.Enco ...

  3. Android四大组件之——ContentProvider(一)

    Android四大组件之--ContentProvider(一) 本人邮箱:JohnTsai.Work@gmail.com,欢迎交流讨论. 欢迎转载,转载请注明网址:http://www.cnblog ...

  4. java中字符串太长,怎么自动换到下一行

    直接在中间代码出按回车

  5. Lua string库详解

    1. string库中所有的字符索引从前往后是1,2,...;从后往前是-1,-2,...2. string库中所有的function都不会直接操作字符串,而是返回一个结果 string.byte(s ...

  6. web.py开发

    web.py需要使用python2.X,所以安装python版本2.7.9 web.py 是一个轻量级Python web框架,它简单而且功能强大 web.py安装 安装python (1)使用pip ...

  7. 二维码生成:使用 JavaScript 库QRCode.js生成二维码

    QRCode.js:跨浏览器的javascript二维码生成库,支持html5的Canvas画布,没有任何依赖. Github 地址:https://github.com/davidshimjs/qr ...

  8. 如何使用 MasterPage

    MasterPageFile母版页 刚开始学,什么都不懂,看到了这段代码,才促使自己去研究MasterPageFile到底是什么含义.<%@ Page Language="C#&quo ...

  9. 05-Vim命令合集

    Vim命令合集 命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filena ...

  10. logback -- 配置详解 -- 三 -- <encoder>

    附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...