哈希表思想与二维数组区块(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;
}
}
原文:https://www.cnblogs.com/fromneptune/p/13235610.html