题目

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.

题解

这道题利用的是HashSet的唯一性来帮助check。

先按每行check,如果是'.'说明还没填字,是合法的,往下走,如果没在set中存过就加一下,如果便利过程中出现了在set中存在的key值,说明有重复的数字在一行,不合法,return false。

再按照这个方法check列。

最后按照这个方法check小方块。

注意小方块的ij取法。对于当前这块板子来说,总共有9个小方格,按0~8从左到右依次编号。

按编号求'/'就是求得当前小方格的第一行横坐标,因为每个小方格有3行,所以循环3次。

按编号求'%'就是求得当前小方格的第一列纵坐标,因为每个小方格有3列,所以循环3次。

对9个小方格依次走一边,就完成了检查小方格的工作。

代码如下:

  1.  1 public boolean isValidSudoku(char[][] board) {
  2.  2     HashSet<Character> set = new HashSet<Character>();
  3.  3     // Check for each row
  4.  4     for (int i = 0; i < 9; i++) {
  5.  5         for (int j = 0; j < 9; j++) {
  6.  6             if (board[i][j] == '.')
  7.  7                 continue;
  8.  8             if (set.contains(board[i][j]))
  9.  9                 return false;
  10.              set.add(board[i][j]);
  11.          }
  12.          set.clear();
  13.      }
  14.  
  15.      // Check for each column
  16.      for (int j = 0; j < 9; j++) {
  17.          for (int i = 0; i < 9; i++) {
  18.              if (board[i][j] == '.')
  19.                  continue;
  20.              if (set.contains(board[i][j]))
  21.                  return false;
  22.              set.add(board[i][j]);
  23.          }
  24.          set.clear();
  25.      }
  26.  
  27.      // Check for each sub-grid
  28.      for (int k = 0; k < 9; k++) {
  29.          for (int i = k/3*3; i < k/3*3+3; i++) {
  30.              for (int j = (k%3)*3; j < (k%3)*3+3; j++) {
  31.                  if (board[i][j] == '.')
  32.                      continue;
  33.                  if (set.contains(board[i][j]))
  34.                      return false;
  35.                  set.add(board[i][j]);
  36.              }
  37.          }
  38.          set.clear();
  39.      }
  40.      
  41.      return true;
  42.  }

Valid Sudoku leetcode java的更多相关文章

  1. Valid Sudoku leetcode

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

  2. Valid Palindrome leetcode java

    题目: Given a string, determine if it is a palindrome, considering only alphanumeric characters and ig ...

  3. Longest Valid Parentheses leetcode java

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

  4. Valid Parentheses leetcode java

    题目: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the ...

  5. Valid Number leetcode java

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

  6. Java [leetcode 36]Valid Sudoku

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

  7. LeetCode——Valid Sudoku

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

  8. [LeetCode] 036. Valid Sudoku (Easy) (C++)

    指数:[LeetCode] Leetcode 解决问题的指数 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 036. ...

  9. leetcode@ [36/37] Valid Sudoku / Sudoku Solver

    https://leetcode.com/problems/valid-sudoku/ Determine if a Sudoku is valid, according to: Sudoku Puz ...

随机推荐

  1. Linux usb 驱动程序范例

                     linxu_usb驱动之框架 USB骨架程序可以被看做一个最简单的USB设备驱动的实例. 首先看看USB骨架程序的usb_driver的定义 [cpp] view p ...

  2. KVM基于X86硬件辅助的虚拟化技术实现机制【转】

    内存虚拟化 Shadow Paging 作者 Shawn 在其中文博客中很详尽地介绍了 KVM 在只支持一级分页的 x86 平台上用 “Shadow Paging”进行 MMU 虚拟化的实现,由于目前 ...

  3. BZOJ2671 : Calc

    设$d=\gcd(a,b),a=xd,b=yd$,则$a+b|ab$等价于$x+y|xyd$. 因为$x,y$互质,所以$x+y|d$. 假设$x<y$,那么对于固定的$x,y$,有$\lflo ...

  4. 【BZOJ-4556】字符串 后缀数组+二分+主席树 / 后缀自动机+线段树合并+二分

    4556: [Tjoi2016&Heoi2016]字符串 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 657  Solved: 274[Su ...

  5. Regex.Split

    private static List<int> GetThemeIds(string themeList) { const string split = "!===!" ...

  6. lodoop打印控件详解

    注意:使用此打印控件需要引入(在我上传的Demo中都有): install_lodop32.exe install_lodop64.exe LodopFuncs.js jquery-1.10.0.mi ...

  7. MySQL是如何利用索引的

    http://fordba.com/spend-10-min-to-understand-how-mysql-use-index.html

  8. PHP扩展迁移为PHP7扩展兼容性问题记录

    PHP7扩展编写的时候,提供的一些内核方法和之前的PHP之前的版本并不能完全兼容.有不少方法参数做了调整.下面是在迁移过程中遇到的一些问题.记录下来,避免大家再踩坑. add_assoc_string ...

  9. SATA工作模式咋选?揭秘AHCI和IDE区别(全文)

    第1页:AHCI模式与Win7.SSD的不解之缘     AHCI这个注定和SATA接口结下不解之缘的接口模式,它担负着淘汰IDE模式的重任,从诞生开始就充满争议,它经历了整整7年时间.它伴随着SSD ...

  10. C#获取文件夹及文件的大小与占用空间的方法

    本文详细介绍了利用C#实现根据路径,计算这个路径所占用的磁盘空间的方法 . 网上有很多资料都是获取文件夹/文件的大小的.对于占用空间的很少有完整的代码.这里介绍实现这一功能的完整代码,供大家参考一下. ...