36. 有效的数独(遍历一次 9+9+9个字典 哈希) 37. 解数独
发布日期:2025-06-19 07:02:45 浏览次数:4 分类:精选文章

本文共 3055 字,大约阅读时间需要 10 分钟。

有效的数独判断

数独是一种经典的逻辑题目,它的有效性判断主要依赖于每行、每列以及每个3x3的小方块内数字的唯一性。以下是用于判断数独有效性的Python代码:

from typing import Listclass Solution:    def isValidSudoku(self, board: List[List[str]]) -> bool:        rows = [{} for _ in range(9)]        cols = [{} for _ in range(9)]        boxes = [{} for _ in range(9)]                for i in range(9):            for j in range(9):                num = board[i][j]                if num != '.':                    num = int(num)                    box_index = (i // 3) * 3 + (j // 3)                    rows[i][num] = rows[i].get(num, 0) + 1                    cols[j][num] = cols[j].get(num, 0) + 1                    boxes[box_index][num] = boxes[box_index].get(num, 0) + 1                                        if rows[i][num] > 1 or cols[j][num] > 1 or boxes[box_index][num] > 1:                        return False        return True

解数独

解数独可以通过回溯算法来实现。该算法通过尝试填充每个空格,并检查是否违反数独规则来逐步填充整个数独表。以下是解数独的Python代码:

from typing import Listclass Solution:    def solveSudoku(self, board: List[List[str]]) -> None:        def backtrack(pos):            if pos == 81:                return True            row = pos // 9            col = pos % 9            if board[row][col] != '.':                return backtrack(pos + 1)                        for num in range(1, 10):                if self.isValid(board, row, col, num):                    board[row][col] = str(num)                    if backtrack(pos + 1):                        return True                    board[row][col] = '.'            return False                def isValid(board, row, col, num):            for j in range(9):                if board[row][j] == str(num):                    return False            for i in range(9):                if board[i][col] == str(num):                    return False            box_row = (row // 3) * 3            box_col = (col // 3) * 3            for i in range(box_row, box_row + 3):                for j in range(box_col, box_col + 3):                    if board[i][j] == str(num):                        return False            return True                for i in range(9):            for j in range(9):                if board[i][j] == '.':                    backtrack(i * 9 + j)

生成标准数独地图

要生成一张标准数独地图,我们需要确保地图有17个数字提示,并且有唯一解。以下是生成标准数独地图的Python函数:

def generate_standard_sudoku():    initial_board = [        ["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"]    ]        solver = Solution()    solver.solveSudoku(initial_board)        print("Standard Sudoku Grid:")    for row in initial_board:        print(' '.join(row))

总结

通过以上代码和解释,可以实现数独的有效性判断和解算。有效性判断通过检查每行、每列和每个3x3小方块中的数字唯一性来确定数独的有效性。解算则利用回溯算法,逐步填充空格,确保每一步都符合数独规则。生成标准数独地图则需要结合初始布局和解算算法,确保地图有17个数字提示并且有唯一解。

上一篇:38.使用标签-基础表单标签
下一篇:35岁-59岁-人生的二个世界

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2026年06月18日 07时03分59秒