[leetcode]_Valid Sudoku

中间被启程日本的面试弄的没有静下心来复习算法。这样不好,基本功是硬道理。逐步恢复刷题。

题目:给一个数独(九宫格)中的一些数字,判断该数独是否有效。

        即按照数独的规则,判断其行、列、小九格中是否有重复的数字。如有,即判断无效。

 

直接给代码吧,长期没刷题,代码质量有所下降。

 1  public boolean isValidSudoku(char[][] board) {
 2         int[] help = new int[10];
 3         
 4         //横排检测
 5         for(int i = 0 ; i < 9 ; i++){
 6             for(int j = 0 ; j < 9 ; j++){
 7                 if(board[i][j] != '.') help[board[i][j] - '0']++;
 8             }
 9             for(int k = 1 ; k <= 9 ; k++){
10                 if(help[k] > 1) return false;
11                 else help[k] = 0;
12             }
13         }
14         
15         //竖排检测
16         for(int row = 0 ; row < 9 ; row++){
17             for(int col = 0 ; col < 9 ; col++){
18                 if(board[col][row] != '.') help[board[col][row] - '0']++;
19             }
20             for(int k = 1 ; k <= 9 ; k++){
21                 if(help[k] > 1) return false;
22                 else help[k] = 0;
23             }
24         }
25         
26         //小九宫格检测
27         int rowStart = 0,rowEnd = 3, colStart = 0 ,colEnd = 3;
28         while(colStart < 9){
29             while(rowStart < 9){
30                 for(int row = rowStart ; row < rowEnd ; row++){
31                     for(int col = colStart ; col < colEnd ; col++){
32                         if(board[row][col] != '.') help[board[row][col] - '0']++;
33                     }
34                 }
35                 for(int k = 1 ; k <= 9 ; k++){
36                         if(help[k] > 1) return false;
37                         else help[k] = 0;
38                 }
39                 rowStart += 3;
40                 rowEnd += 3;
41             }
42             colStart += 3;
43             colEnd += 3;
44             rowStart = 0;
45             rowEnd = 3;
46         }
47         return true;
48     }

 

posted on 2014-05-21 21:01  匡匡锵锵  阅读(160)  评论(0编辑  收藏  举报

导航

AmazingCounters.com