题目:
判断一个数独是否有效,根据:Sudoku Puzzles - The Rules。
数独部分填了数字,空的部分用 '.' 表示。
![]()
一个部分填充是有效的数独。
说明:
一个有效的数独(填了一部分的)不一定是可解的,只要已经填的数字是有效的即可。
解题:判断一个数独是否有效,只要判断每一个行、列、方格有没有重复的数字;通过Set集合来存储每一行的数字;
代码:
1class Solution { 2 public boolean isValidSudoku(char[][] board) { 3 if(null == board || board.length < 9){ 4 return false; 5 } 6 7 Set<Character> rowSet = new HashSet<Character>(); 8 Set<Character> colSet = new HashSet<Character>(); 9 Set<Character> cardSet = new HashSet<Character>(); 10 11 for(int i=0;i<9;i++){ 12 rowSet.clear(); 13 colSet.clear(); 14 cardSet.clear(); 15 for(int j=0;j<9;j++){ 16 17 if(rowSet.contains(board[i][j])){ 18 return false; 19 }else{ 20 if(board[i][j] != '.'){ 21 rowSet.add(board[i][j]); 22 } 23 } 24 25 if(colSet.contains(board[j][i])){ 26 return false; 27 }else{ 28 if(board[j][i] != '.'){ 29 colSet.add(board[j][i]); 30 } 31 } // 计算九宫格的行列下标 32 int r = j/3+i/3*3; 33 int c = (j%3+i*3) % 9; 34 if(cardSet.contains(board[r][(c)])){ 35 return false; 36 }else{ 37 if(board[r][c] != '.'){ 38 cardSet.add(board[r][c]); 39 } 40 } 41 } 42 } 43 return true; 44 } 45}