美文网首页
leetcode-有效的数独

leetcode-有效的数独

作者: 8239e604d437 | 来源:发表于2018-12-07 09:50 被阅读0次

    判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。

    数字 1-9 在每一行只能出现一次。
    数字 1-9 在每一列只能出现一次。
    数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。

    上图是一个部分填充的有效的数独。

    数独部分空格内已填入了数字,空白格用 '.' 表示。

    示例 1:

    输入:
    [
      ["5","3",".",".","7",".",".",".","."],
      ["6",".",".","1","9","5",".",".","."],
      [".","9","8",".",".",".",".","6","."],
      ["8",".",".",".","6",".",".",".","3"],
      ["4",".",".","8",".","3",".",".","1"],
      ["7",".",".",".","2",".",".",".","6"],
      [".","6",".",".",".",".","2","8","."],
      [".",".",".","4","1","9",".",".","5"],
      [".",".",".",".","8",".",".","7","9"]
    ]
    输出: true
    

    示例 2:

    输入:
    [
      ["8","3",".",".","7",".",".",".","."],
      ["6",".",".","1","9","5",".",".","."],
      [".","9","8",".",".",".",".","6","."],
      ["8",".",".",".","6",".",".",".","3"],
      ["4",".",".","8",".","3",".",".","1"],
      ["7",".",".",".","2",".",".",".","6"],
      [".","6",".",".",".",".","2","8","."],
      [".",".",".","4","1","9",".",".","5"],
      [".",".",".",".","8",".",".","7","9"]
    ]
    输出: false
    

    解释: 除了第一行的第一个数字从 5 改为 8 以外,空格内其他数字均与 示例1 相同。
    但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。
    说明:

    一个有效的数独(部分已被填充)不一定是可解的。
    只需要根据以上规则,验证已经填入的数字是否有效即可。
    给定数独序列只包含数字 1-9 和字符 '.' 。
    给定数独永远是 9x9 形式的。

    代码

    
    /**
     * @param {character[][]} board
     * @return {boolean}
     */
    var isValidSudoku = function(board) {
        let rows = {};
        let ranks = {};
        let react = {};
        let result = true;
        for(let n=0;n<board.length;n++){
            for(let m=0;m<board[n].length;m++){
                let value = board[n][m]
                if(value != '.'){
                    
                    if(!rows[n]){
                        rows[n] ={}
                    }
                    if(!ranks[m]){
                        ranks[m]={}
                    }
               
                    //条件一
                    if(!rows[n][value]){
                        rows[n][value] = true
                    }else{
                        result = false;
                    }
                    //条件二
                    if(!ranks[m][value]){
                        ranks[m][value] = true;
                    }else{
                        result = false;
                    }
                    //条件三
                    
                    let rowsN = Math.ceil((n+1)/3);
                    let ranksM = Math.ceil((m+1)/3);
                   
                    if(!react[rowsN]){
                        react[rowsN] = {}
                    }
                    if( !react[rowsN][ranksM] ){
                        react[rowsN][ranksM] = {}
                    }
                    if(!react[rowsN][ranksM][value]){
                        react[rowsN][ranksM][value] = true
                    }else{
                        result = false;
                    }
                }
                
            }
        }
    
        return result
        
        
    };
    

    相关文章

      网友评论

          本文标题:leetcode-有效的数独

          本文链接:https://www.haomeiwen.com/subject/jjizcqtx.html