题目大意:输入一个含有部分数据的数独数组,查验是否这个数组中的数是否满足数独条件,即行、列、小3*3框没有重复数值。37题是构造数独解。
法一:直接逐一判断即可。代码如下(耗时20ms):
1 public boolean isValidSudoku(char[][] board) { 2 for(int i = 0; i < 9; i++) { 3 for(int j = 0; j < 9; j++) { 4 if(check(i, j, board) == false) { 5 return false; 6 } 7 } 8 } 9 return true; 10 } 11 private boolean check(int x, int y, char[][] board) { 12 if(board[x][y] != '.') { 13 for(int i = 0; i < 9; i++) { 14 //判断行 15 if(i != y && board[x][i] == board[x][y]) { 16 return false; 17 } 18 //判断列 19 if(i != x && board[i][y] == board[x][y]) { 20 return false; 21 } 22 } 23 } 24 x = x / 3 * 3; 25 y = y / 3 * 3; 26 HashSet<Character> set = new HashSet<Character>(); 27 //判断3*3的框 28 for(int i = x; i < x + 3; i++) { 29 for(int j = y; j < y + 3; j++) { 30 if(board[i][j] != '.') { 31 if(set.contains(board[i][j])) { 32 return false; 33 } 34 else { 35 set.add(board[i][j]); 36 } 37 } 38 } 39 } 40 return true; 41 }