LintCode Valid Sudoku 判断数独是否合法

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

该数独可能只填充了部分数字,其中缺少的数字用 . 表示。
样例
下列就是一个合法数独的样例。
Determine whether a Sudoku is valid.

The Sudoku board could be partially filled, where empty cells are filled with the character ..

注意
一个合法的数独(仅部分填充)并不一定是可解的。我们仅需使填充的空格有效即可。
Note
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.

说明
什么是 数独?

http://sudoku.com.au/TheRules.aspx
http://baike.baidu.com/subview/961/10842669.htm

Clarification
What is Sudoku?

http://sudoku.com.au/TheRules.aspx
https://zh.wikipedia.org/wiki/%E6%95%B8%E7%8D%A8
https://en.wikipedia.org/wiki/Sudoku
http://baike.baidu.com/subview/961/10842669.htm

class Solution {
    /**
      * @param board: the board
        @return: wether the Sudoku is valid
      */
    private Set set = new HashSet();
    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;
        }
    }
};

你可能感兴趣的:(LintCode,Array,java,LintCode,Java)