leetcode中等36有效的数独

Posted qq_40707462

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode中等36有效的数独相关的知识,希望对你有一定的参考价值。


思路:用二维数组row[][],col[][],block[][]分别记录每一行、列、方格中,某一数字是否出现过

计算3x3方格的标号:

0       1        2
3       4        5
6       7        8
每个数字代表一个3*3的格子的blockIndex,

先看列,是按照加一的方式增加,所以是j / 3
再看行,是按照0*3 1*3 2*3 的方式增加 所以先除3算出前面的数,也就是0 1 2 ,再乘3+ 列 就是方格中元素的blockIndex
class Solution:
    def isValidSudoku(self, board: List[List[str]]) -> bool:
        row=[[False for _ in range(9)]for _ in range(9)]
        col=[[False for _ in range(9)]for _ in range(9)]
        block=[[False for _ in range(9)]for _ in range(9)]
		#不知道为什么不能=[[False]*9]*9
        for i in range(9):
            for j in range(9):
                if board[i][j]!=".":
                    num=int(board[i][j])-1
                    blockIndex=i//3*3+j//3
                    if row[i][num] or col[j][num] or block[blockIndex][num]:
                        return False
                    else:
                        row[i][num]=True
                        col[j][num]=True
                        block[blockIndex][num]=True
        return True
class Solution {
    public boolean isValidSudoku(char[][] board) {
        // 记录某行,某位数字是否已经被摆放
        boolean[][] row = new boolean[9][9];
        // 记录某列,某位数字是否已经被摆放
        boolean[][] col = new boolean[9][9];
        // 记录某 3x3 宫格内,某位数字是否已经被摆放
        boolean[][] block = new boolean[9][9];

        for(int i=0;i<9;i++){
            for(int j=0;j<9;j++){
                if(board[i][j]!='.'){
                    int num=board[i][j]-'1';//如果 -'0',会出现9,但bollean[][]下标为0-8
                    int blockIndex=i/3*3+j/3;
                    if(row[i][num] || col[j][num] || block[blockIndex][num]){
                        return false;
                    }else{
                        row[i][num]=true;
                        col[j][num]=true;
                        block[blockIndex][num]=true;
                    }
                }
            }
        }
        return true;
    }
}

以上是关于leetcode中等36有效的数独的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode刷题100天—36. 有效的数独(数组+哈希)—day26

Leetcode刷题100天—36. 有效的数独(数组+哈希)—day26

c_cpp 36.有效的数独 - 难度中等 - 2018.9.18

leetcode-----36. 有效的数独

LeetCode 36有效的数独

[JavaScript 刷题] 矩阵 - 有效的数独, leetcode 36