LintCode 判断数独是否合法

题目

请判定一个数独是否有效。
该数独可能只填充了部分数字,其中缺少的数字用 .表示。

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

说明
什么是 数独?
http://sudoku.com.au/TheRules.aspx
http://baike.baidu.com/subview/961/10842669.htm

样例

shudu.PNG

上面就是一个合法数独的样例

分析

初看上去题目似乎很复杂,其实不然。本题就是判断数组行列不能有重复元素,以及小九宫格不能有重复元素的算法。
首先,分别判断行,列,最后判断九宫格。

代码

class Solution {
    /**
      * @param board: the board
        @return: wether the Sudoku is valid
      */
    public boolean isValidSudoku(char[][] board) {
        
        boolean[] visited = new boolean[9];
        
        // row
        for(int i = 0; i<9; i++){
            Arrays.fill(visited, false);
            for(int j = 0; j<9; j++){
                if(!process(visited, board[i][j]))
                    return false;
            }
        }
        
        //col
        for(int i = 0; i<9; i++){
            Arrays.fill(visited, false);
            for(int j = 0; j<9; j++){
                if(!process(visited, board[j][i]))
                    return false;
            }
        }
        
        // sub matrix
        for(int i = 0; i<9; i+= 3){
            for(int j = 0; j<9; j+= 3){
                Arrays.fill(visited, false);
                for(int k = 0; k<9; k++){
                    if(!process(visited, board[i + k/3][ j + k%3]))
                    return false;                   
                }
            }
        }
        return true;
    }
    private boolean process(boolean[] visited, char digit){
        if(digit == '.'){
            return true;
        }
        
        int num = digit - '0';
        if ( num < 1 || num > 9 || visited[num-1]){
            return false;
        }
        
        visited[num-1] = true;
        return true;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作者:杨舸 跟数独游戏的结缘,是一次次的空中飞行。经常出差,如何消磨旅途时间?航空杂志都翻烂了,小说也不是每次出差...
    Sting阅读 13,255评论 1 8
  • 难度划分 影响数独难度的因素很多,就题目本身而言,包括最高难度的技巧、各种技巧所用次数、是否有隐藏及隐藏的深度及广...
    杨过的大雕阅读 3,686评论 0 3
  • 喜欢看《最好的我们》的人不难发现,学霸余淮特别喜欢做数独,在上课的时候也会做数独题。最近重看电视剧,想起官网上的那...
    晨曦爱读书阅读 13,502评论 5 40
  • 看了《最强大脑》20170317这期,不禁为13岁的数独少年胡宇轩的精彩表现点赞。 通过节目,很多人对“数独”游戏...
    lzl727阅读 13,245评论 0 4
  • 潜伏者 原题 R 国和 S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动。历尽艰险后,潜伏于 S 国的...
    bbqub阅读 473评论 0 0