• 力扣题解 36th 有效的数独


    36th 有效的数独

    • 哈希表思想与二维数组区块(section)的划分

      首先,采用哈希表思想保证数字1-9只出现一次。

      其次,对于条件1和条件2我们很容易写出对应的hash table并填充好数据,但是对于条件3我们需要将二位数组进行区块拆封。

      区块拆封方法:

      • 分析过程:已知原数组容量为9x9,则以一个3x3为区块拆分后,二维数组容量为为3x3。当i=0或1或2,j=0或1或2时,i/3始终为0,j/3始终为0。以此类推可用i/3,j/3来定位新的3x3数组。
      class Solution {
          public boolean isValidSudoku(char[][] board) {
              int[][] table_raw = new int[9][10];
              int[][] table_column = new int[9][10];
              int[][][] table_section = new int[3][3][10];
      
              for (int i = 0; i < 9; i++) {
                  for (int j = 0; j < 9; j++) {
                      // raw
                      if (board[i][j] != '.')
                          table_raw[i][board[i][j] - '0']++;
                      // column
                      if (board[j][i] != '.')
                          table_column[i][board[j][i] - '0']++;
                      // section
                      if (board[i][j] != '.')
                          table_section[i / 3][j / 3][board[i][j] - '0']++;
                  }
              }
      
              for (int i = 0; i < 9; i++) {
                  for (int j = 0; j < 10; j++) {
                      if (table_raw[i][j] > 1 || table_column[i][j] > 1)
                          return false;
                  }
              }
              for (int i = 0; i < 3; i++) {
                  for (int j = 0; j < 3; j++) {
                      for (int k = 0; k < 10; k++) {
                          if (table_section[i][j][k] > 1)
                              return false;
                      }
                  }
              }
              return true;
          }
      }
      
  • 相关阅读:
    三十五、常用控件
    三十九.导入工程出错
    三十七、创建无图标的应用
    三十二、汉字排序
    三十八、分辨率适配方法
    四十一、打开各种文件的intent
    ExamTime
    MusicPXY3.1
    单目运算符的最新认识
    寄快递费用
  • 原文地址:https://www.cnblogs.com/fromneptune/p/13235610.html
Copyright © 2020-2023  润新知