判断数独是否合法(LintCode)

判断数独是否合法

请判定一个数独是否有效。

该数独可能只填充了部分数字,其中缺少的数字用. 表示。

样例

下列就是一个合法数独的样例。

Valid Sudoku

注意

一个合法的数独(仅部分填充)并不一定是可解的。我们仅需使填充的空格有效即可。

说明

什么是 数独

 

一开始认为会超时于是有了用空间换时间的想法于是出现如下代码。。

后来一想,肯定不会超时啊。。 不过这样代码其实也简单了很多。

 

总耗时: 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 };
View Code

 

 

 

posted @ 2015-12-05 20:19  -.-|  阅读(1608)  评论(0编辑  收藏  举报