Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
The Sudoku board could be partially filled, where empty cells are filled with the character ‘.‘
.
A partially filled sudoku which is valid.
Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.
题解:根据题目的意思,每行每列和每一个3*3的九宫格里面1~9这9个数不能有重复的,那么就按行,列,和九宫格一一检查即可,要注意下标的计算和‘.‘符号的处理。
代码如下:
1 public class Solution { 2 public boolean isValidSudoku(char[][] board) { 3 int length = board.length; 4 if(length == 0) 5 return true; 6 7 for(int i = 0;i < length;i++){ 8 boolean[] row_numbers = new boolean[10]; 9 boolean[] column_numbers = new boolean[10]; 10 for(int j = 0;j < length;j++){ 11 //check if rows are valid 12 if(board[i][j]!= ‘.‘ ){ 13 if(row_numbers[board[i][j] - ‘0‘]) 14 return false; 15 row_numbers[board[i][j]-‘0‘] = true; 16 } 17 18 //check if colums are valid 19 if(board[j][i]!= ‘.‘){ 20 if(column_numbers[board[j][i]-‘0‘]) 21 return false; 22 column_numbers[board[j][i]-‘0‘] = true; 23 } 24 } 25 } 26 27 //check if every 3*3 grid is valid 28 for(int i = 0;i < 3;i++){ 29 for(int j = 0;j < 3;j++){ 30 boolean[] numbers = new boolean[10]; 31 for(int row = 3*i;row < 3*i+3;row++){ 32 for(int column = 3*j;column < 3*j+3;column++){ 33 if(board[row][column] != ‘.‘){ 34 if(numbers[board[row][column]-‘0‘]) 35 return false; 36 numbers[board[row][column]-‘0‘] = true; 37 } 38 } 39 } 40 } 41 } 42 43 return true; 44 } 45 }
代码中行和列的检查在一次9*9的循环中解决了,可以省一点时间,最终耗时532ms。
时间: 2024-10-09 19:00:04