Likou NO.36 Sudoku efectivo (tabla hash)

enlace de tema

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Solución 1: tres tablas hash almacenan el número de ocurrencias del número de posición correspondiente

Tabla hash de fila, columna, cuadro
fila_haxi = [[0] * 10 para _ en rango (9)] # Toma num = int(tablero[i][j]) Sea fila_haxi[i][num]+=1
columna_haxi = [[0] * 10 for _ in range(9)] # Tome num = int(board[i][j]) para que column_haxi[j][num]+=1
box_haxi = [[0] * 10 para _ in range(9)] # Take num = int(tablero[i][j]) m(número de cajas): m = j//3 + i//3*3;n(número de cajas) : n = num let box_haxi[m][n]+=1

class Solution:
    def isValidSudoku(self, board: List[List[str]]) -> bool:
        # 行,列,box 的哈希表
        row_haxi = [[0] * 10 for _ in range(9)] # 取num = int(board[i][j]) 令 row_haxi[i][num]+=1
        column_haxi = [[0] * 10 for _ in range(9)] # 取num = int(board[i][j]) 令 column_haxi[j][num]+=1
        box_haxi = [[0] * 10 for _ in range(9)] # 取num = int(board[i][j]) m(第几个box):m = j//3 + i//3*3;n(第几个数):n = num 令 box_haxi[m][n]+=1
        for i in range(9):
            for j in range(9):
                if board[i][j]!='.':  # 非空值时进行判断
                    num = int(board[i][j])
                    row_haxi[i][num]+=1   
                    column_haxi[j][num]+=1
                    box_haxi[j//3 + i//3*3][num]+=1
                    # 判断是否合规
                    if row_haxi[i][num]>1:return False
                    if column_haxi[j][num]>1:return False
                    if box_haxi[j//3 + i//3*3][num]>1:return False
        return True

Supongo que te gusta

Origin blog.csdn.net/qq_33489955/article/details/124263258
Recomendado
Clasificación