36. 有效的数独
给·一个9*9的二维矩阵,每一个单元中有1-9数字或者“.”,1-9只能出现一次。
一个行、列为一个单元
一个3*3(一共9)个为一个单元,写判断是否成立的算法。
HashMap的方法
class Solution {
public boolean isValidSudoku(char[][] board) {
Map<Integer,Map<Integer,Integer>> rowMaps = new HashMap<>();
Map<Integer,Map<Integer,Integer>> colMaps = new HashMap<>();
Map<Integer,Map<Integer,Integer>> blockMaps = new HashMap<>();
for(int i =0;i<board.length;i++){
for(int j = 0;j<board.length;j++){
//处理数值
if(board[i][j]=='.'){
continue;
}
int num = Character.getNumericValue(board[i][j]);
// 处理row,以i为key值
if(rowMaps.get(i)==null){
rowMaps.put(i,new HashMap<Integer,Integer>());
}
Map<Integer,Integer> rowMap = rowMaps.get(i);
Integer row_count = rowMap.get(num);
if(row_count==null){
rowMap.put(num,1);
}else{
return false;
}
rowMaps.put(i,rowMap);
// 处理row,以i为key值
if(colMaps.get(j)==null){
colMaps.put(j,new HashMap<Integer,Integer>());
}
Map<Integer,Integer> colMap = colMaps.get(j);
Integer col_count = colMap.get(num);
if(col_count==null){
colMap.put(num,1);
}else{
return false;
}
colMaps.put(j,colMap);
//处理block
int blockNum=getBlockNum(i,j);
if(blockMaps.get(blockNum)==null){
blockMaps.put(blockNum,new HashMap<Integer,Integer>());
}
Map<Integer,Integer> blockMap = blockMaps.get(blockNum);
Integer block_count = blockMap.get(num);
if(block_count==null){
blockMap.put(num,1);
}else{
return false;
}
blockMaps.put(blockNum,blockMap);
}
}
return true;
}
/**
0-2 0-2 i/3+j/3 =0 0为第一个块 0-2 3-5 i/3+j/3 =0
3-5
5-8
*/
public int getBlockNum(int i,int j){
return (i/3)*3+j/3;
}
}