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.


题解:根据题目的意思,每行每列和每一个3*3的九宫格里面1~9这9个数不能有重复的,那么就按行,列,和九宫格一一检查即可,要注意下标的计算和'.'符号的处理。

代码如下:

 public class Solution {
public boolean isValidSudoku(char[][] board) {
int length = board.length;
if(length == 0)
return true; for(int i = 0;i < length;i++){
boolean[] row_numbers = new boolean[10];
boolean[] column_numbers = new boolean[10];
for(int j = 0;j < length;j++){
//check if rows are valid
if(board[i][j]!= '.' ){
if(row_numbers[board[i][j] - '0'])
return false;
row_numbers[board[i][j]-'0'] = true;
} //check if colums are valid
if(board[j][i]!= '.'){
if(column_numbers[board[j][i]-'0'])
return false;
column_numbers[board[j][i]-'0'] = true;
}
}
} //check if every 3*3 grid is valid
for(int i = 0;i < 3;i++){
for(int j = 0;j < 3;j++){
boolean[] numbers = new boolean[10];
for(int row = 3*i;row < 3*i+3;row++){
for(int column = 3*j;column < 3*j+3;column++){
if(board[row][column] != '.'){
if(numbers[board[row][column]-'0'])
return false;
numbers[board[row][column]-'0'] = true;
}
}
}
}
} return true;
}
}

代码中行和列的检查在一次9*9的循环中解决了,可以省一点时间,最终耗时532ms。


【leetcode刷题笔记】Valid Sudoku的更多相关文章

  1. 【leetcode刷题笔记】Sudoku Solver

    Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...

  2. LeetCode刷题笔记和想法(C++)

    主要用于记录在LeetCode刷题的过程中学习到的一些思想和自己的想法,希望通过leetcode提升自己的编程素养 :p 高效leetcode刷题小诀窍(这只是目前对我自己而言的小方法,之后会根据自己 ...

  3. 18.9.10 LeetCode刷题笔记

    本人算法还是比较菜的,因此大部分在刷基础题,高手勿喷 选择Python进行刷题,因为坑少,所以不太想用CPP: 1.买股票的最佳时期2 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. ...

  4. LeetCode刷题笔记 - 12. 整数转罗马数字

    学好算法很重要,然后要学好算法,大量的练习是必不可少的,LeetCode是我经常去的一个刷题网站,上面的题目非常详细,各个标签的题目都有,可以整体练习,本公众号后续会带大家做一做上面的算法题. 官方链 ...

  5. Leetcode刷题笔记(双指针)

    1.何为双指针 双指针主要用来遍历数组,两个指针指向不同的元素,从而协同完成任务.我们也可以类比这个概念,推广到多个数组的多个指针. 若两个指针指向同一数组,遍历方向相同且不会相交,可以称之为滑动窗口 ...

  6. 【leetcode刷题笔记】Longest Valid Parentheses

    Given a string containing just the characters '(' and ')', find the length of the longest valid (wel ...

  7. 【leetcode刷题笔记】Valid Palindrome

    Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...

  8. LeetCode 刷题笔记 2. 有效的括号(Valid Parentheses)

    tag: 栈(stack) 题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须 ...

  9. 【leetcode刷题笔记】Valid Number

    Validate if a given string is numeric. Some examples:"0" => true" 0.1 " => ...

随机推荐

  1. IIS相关知识和经验的碎皮化记录

    1.IIS(Internet Information Services)网站本机可以访问,局域网其他机器无法访问 导致这个问题之一是防火墙规则,解决办法如下: 1)[开始]打开[控制面板],选择[WI ...

  2. Django--基础补充

    render 函数 在Django的使用中,render函数大多与浏览器发来的GET请求一并出现,它的使用方法非常简单 例如:render(request,"xxx.html",{ ...

  3. CP936 转换成 UTF-8

    最近写了一个抓取脚本,抓取的大部分内容正常,但少部分乱码 检测字符编码,得出的结果是CP936 mb_detect_encoding($str, 'GBK, gb2312, GB18030, ISO- ...

  4. Android BroadcastReceiver介绍 (转)

    原文地址:http://www.cnblogs.com/trinea/archive/2012/11/09/2763182.html 本文主要介绍BroadcastReceiver的概念.使用.生命周 ...

  5. git 入门二 (基础)

     1.创建新仓库      git init    touch  test.txt  git add --a  git commit -m "fist commit"    初始化 ...

  6. android 自定义 listView

    目录: 1.主布局 ListView <?xml version="1.0" encoding="utf-8"?><RelativeLayou ...

  7. 验证-- email类型输入框(电子邮件地址)--multiple

    如果需要一个用来填写电子邮件地址的输入框,可以使用email类型.这样浏览器可以帮我们验证格式是否正确,而不需要自己写验证规则.原文:HTML5新控件 - email类型输入框(电子邮件地址) 1,只 ...

  8. C语言基础知识【判断】

    C 判断1.判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的).C 语言把任何非零和非空的值假定为 true,把零或 null ...

  9. Lumen开发:结合Redis实现消息队列(2)

    上一篇讲了Lumen配置Redis,现在来讲一下,如何实现消息队列 2.编写任务类 2.1  任务类结构 默认情况下,应用的所有队列任务都存放在app/Jobs目录.任务类非常简单,正常情况下只包含一 ...

  10. Android创建library工程

    本文着重介绍如何创建Android library,并且在工程中使用此library提供的资源,具体步骤如下:1. 创建一个Android工程,命名为sourceProj2. 右键--properti ...