LintCode389.判断数独是否合法

LintCode简单题:判断数独是否合法

问题描述:

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

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

注意事项:

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

样例:

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

 

分析:关于如何判断数独有效其实很简单,玩过的都知道,数独的每一行,每一列,每一个3*3的矩阵中不能出现重复的数字而且必须是1-9。那么Java代码是怎么完成的呢?

 

class Solution {
    /**
      * @param board: the board
        @return: wether the Sudoku is valid
      */
    private Set<Character> set = new HashSet<Character>();
    
    public boolean isValidSudoku(char[][] board) {
        
        //row
        for (int i = 0; i < 9; i++) {
            for(int j = 0; j < 9; j++) {
               if(!check(board[i][j])) return false;  
            }
            set.clear();
        }
        //column
        for (int i = 0; i < 9; i++) {
            for(int j = 0; j < 9; j++) {
               if(!check(board[j][i])) return false;  
            }
            set.clear();
        }
        //sub matrix
        for (int i = 0; i < 9; i++) {
            for(int j = 0; j < 9; j++) {
               if(!check(board[i/3*3 + j/3][i%3*3 + j%3])) return false;  //这一行关于矩阵的处理是最亮的部分
            }
            set.clear();
        }
        return true;
    }
    public boolean check(char c) {
        if(c == '.') {
            return true;
        } else if(c >= '1' && c <= '9') {
            if (set.contains(c)) {
                return false;
            } else {
                set.add(c);
                return true;
            }
        } else {
            return false;
        }
    }
};

 

posted @ 2016-11-30 17:24  一个弱者想变强  阅读(754)  评论(0编辑  收藏  举报