一、题目
二、代码
一行一行的遍历,注意 子数独下标 boxIndex = (i / 3) * 3 + j / 3
class Solution {
public boolean isValidSudoku(char[][] board) {
Map<Integer, Integer>[] rowsMap = new HashMap[9];
Map<Integer, Integer>[] columnsMap = new HashMap[9];
Map<Integer, Integer>[] boxesMap = new HashMap[9];
for(int i = 0; i < 9; i++){
rowsMap[i] = new HashMap<>();
columnsMap[i] = new HashMap<>();
boxesMap[i] = new HashMap<>();
}
for(int i = 0; i < 9; i++){
for(int j = 0; j < 9; j++){
int num = 0;
int boxIndex = 0;
if(board[i][j] != '.'){
num = (int)board[i][j];
//可以用gerOrdefault()简化代码
if(rowsMap[i].get(num) == null){
rowsMap[i].put(num, 1);
}else{
rowsMap[i].put(num, rowsMap[i].get(num) + 1);
// return false;
}
if(columnsMap[j].get(num) == null){
columnsMap[j].put(num, 1);
}else{
columnsMap[j].put(num, columnsMap[j].get(num) + 1);
// return false;
}
boxIndex = (i / 3) * 3 + j / 3;//子数独下标
if(boxesMap[boxIndex].get(num) == null){
boxesMap[boxIndex].put(num, 1);
}else{
boxesMap[boxIndex].put(num, boxesMap[boxIndex].get(num) + 1);
// return false;
}
if (rowsMap[i].get(num) > 1 ||
columnsMap[j].get(num) > 1 || boxesMap[boxIndex].get(num) > 1){
return false;
}
}
}
}
return true;
}
}