判断数独是否合法(LintCode)
判断数独是否合法
请判定一个数独是否有效。
该数独可能只填充了部分数字,其中缺少的数字用.
表示。
样例
下列就是一个合法数独的样例。
注意
一个合法的数独(仅部分填充)并不一定是可解的。我们仅需使填充的空格有效即可。
说明
View Code
什么是 数独
?
一开始认为会超时于是有了用空间换时间的想法于是出现如下代码。。
后来一想,肯定不会超时啊。。 不过这样代码其实也简单了很多。
总耗时: 1005 ms
1 class Solution { 2 /** 3 * @param board: the board 4 @return: wether the Sudoku is valid 5 */ 6 public boolean isValidSudoku(char[][] board) { 7 int r[][] = new int[9][9]; 8 int l[][] = new int[9][9]; 9 int a[][][] = new int[3][3][9]; 10 11 for(int i=0;i<9;i++) { 12 for(int j=0;j<9;j++) { 13 r[i][j] = 0; 14 l[i][j] = 0; 15 if(i < 3 && j < 3) { 16 for(int k = 0; k<9; k++) 17 a[i][j][k] = 0; 18 } 19 } 20 } 21 22 for(int i=0;i<9;i++) { 23 for(int j=0;j<9;j++) { 24 if(board[i][j] == '.') continue; 25 int n = board[i][j] - '0'; 26 if(n < 0 || n > 9) return false; 27 if(++r[i][n-1] > 1) return false; 28 if(++l[j][n-1] > 1) return false; 29 int x = i/3; 30 int y = j/3; 31 if(++a[x][y][n-1] > 1) return false; 32 } 33 } 34 35 return true; 36 } 37 };