leetcode:36.有效的数独(js实现)

题目如下:
判断一个 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

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

解题思路:
要判断给出的题目是否是一个有效数独分为三步,一是判断每一行是否有重复的元素,二是判断每一列是否有重复的元素,三是判断每一个小块是否有重复的元素,这里可以把每一小块的有效元素分别保存到一个数组中,再判断这个新数组是否有重复的元素

var isValidSudoku = function(board) {
    var flag=0;
    for(var i=0;i<9;i++){
        for(var j=0;j<9;j++){
            for(var z=j+1;z<9;z++){
                if(board[i][j]!="."&&board[i][j]===board[i][z]){     //判断行是否满足规则
                    flag=1;
                    return false;
                }
                if(board[j][i]!="."&&board[j][i]===board[z][i]){      //判断列是否满足规则
                    flag=1;
                    return false;
                }
                
            }
        }
    }
    
    
    for(var row=0;row<9;row+=3){
        for(var col=0;col<9;col+=3){
            var nums=[];
            for(a=row;a<row+3;a++){
                for(b=col;b<col+3;b++){
                    if(board[a][b]!="."){
                        nums.push(board[a][b]);        //将小方格中有效数据放入一个数组
                    }
                }
            }
            for(var x=0;x<nums.length;x++){           //判断小方格是否满足规则
                for(var y=x+1;y<nums.length;y++){
                    if(nums[x]===nums[y]){
                        flag=1;
                        return false;
                    }
                }
            }
        }
    }
    
    if(flag===0){
        return true;    //全部符合规则,输出正确
    } 
};

leetcode:36.有效的数独(js实现)_第1张图片

你可能感兴趣的:(leetcode:36.有效的数独(js实现))