5.5
很神奇的使用了map数组,感觉自己的路子简直是有点儿野。
map数组的定义方式为:
HashMap[][] map2 = new HashMap[2][9];
for(int i = 0;i<2;i++){
for(int j = 0;j<9;j++){
map2[i][j] = new HashMap<Character,Integer>();
}
}
判断数独是不是合法, 要判断同一行,同一列,以及同一个九宫之内是不是有相同的数。
虽然AC了,但是提示我的编译是有错误的。
我也不知道错在了哪里,并不想管。
class Solution {
/**
* @param board: the board
@return: wether the Sudoku is valid
*/
public boolean isValidSudoku(char[][] board) {
int m = board.length;
if(m != 9){
return false;
}
int n = board[0].length;
if( n != 9){
return false;
}
HashMap[][] map2 = new HashMap[2][9];
for(int i = 0;i<2;i++){
for(int j = 0;j<9;j++){
map2[i][j] = new HashMap<Character,Integer>();
}
}
// 分成了横三竖三一共九个
for(int i = 0;i < 9;i = i+3){
for(int j = 0;j<9;j= j+3){
HashMap<Character,Integer> map = new HashMap<Character,Integer>();
for(int x = i;x<i+3;x++){
for(int y = j;y<j+3;y++){
if(board[x][y] != '.'){
if(map.containsKey(board[x][y])){
//System.out.println("错误九宫,第" + x +"行,第"+ y+"列");
return false;
}
else{
map.put(board[x][y],1);
}
if(map2[0][x].containsKey(board[x][y])){
// System.out.println("错误行,第" + x +"行,第"+ y+"列");
return false;
}
else{
map2[0][x].put(board[x][y],1);
}
if(map2[1][y].containsKey(board[x][y])){
// System.out.println("错误列,第" + x +"行,第"+ y+"列");
return false;
}
else{
map2[1][y].put(board[x][y],1);
}
}
}
}
}
}
return true;
}
};