2026.02.01 n皇后 & 解数独

51. N 皇后

python 复制代码
class Solution:
    def solveNQueens(self, n: int) -> List[List[str]]:
        col = [0] * n
        right_left = [0] * 2 * n
        left_right = [0] * 2 * n
        res = []
        path = []

        def backtrack(row : int) -> None:
            if len(path) == n:
                res.append(path[:])
                return
            for i in range(0, n):
                # 每一行从0 -> n 遍历
                if col[i] or right_left[row + i] or left_right[n - row + i - 1]:
                    # 如果冲突则跳过当前位置
                    continue
                # 构建当前行的放置
                path_str = ""
                for j in range(0, n):
                    if j == i:
                        path_str += 'Q'
                    else:
                        path_str += '.'
                
                path.append(path_str)
                col[i] = 1
                right_left[row + i] = 1
                left_right[n - row + i - 1] = 1
                backtrack(row + 1)
                path.pop()
                col[i] = 0
                right_left[row + i] = 0
                left_right[n - row + i - 1] = 0
        backtrack(0)
        return res
                

37. 解数独

python 复制代码
class Solution:
    def solveSudoku(self, board: List[List[str]]) -> None:
        """
        Do not return anything, modify board in-place instead.
        """
        # 记录行、列、3 * 3 box是否出现过某个数字, row[r][num]代表第r行是否存在数字num
        row = [[False] * 10 for _ in range(9)]
        col = [[False] * 10 for _ in range(9)]
        box = [[[False] * 10 for _ in range(3)] for _ in range(3)]

        # 存储所有空白位置
        spaces = []
        # 初始化空间
        for r in range(9):
            for c in range(9):
                if board[r][c] == '.':
                    spaces.append((r, c))
                else:
                    num = int(board[r][c])
                    row[r][num] = True
                    col[c][num] = True
                    box[r // 3][c // 3][num] = True
        def backtrack(index : int) -> bool:
            if index == len(spaces):
                # 如果填完了所有空白就结束返回
                return True
            r, c = spaces[index]
            for num in range(1, 10):
                # 对每个空白格,尝试填入 1-9
                if row[r][num] or col[c][num] or box[r // 3][c // 3][num]:
                    continue
                
                # 做出选择
                board[r][c] = str(num)
                row[r][num] = True
                col[c][num] = True
                box[r // 3][c // 3][num] = True

                if backtrack(index + 1):
                    return True
                
                # 撤销选择
                board[r][c] = "."
                row[r][num] = False
                col[c][num] = False
                box[r // 3][c // 3][num] = False

            return False
        backtrack(0)

            

        
相关推荐
wj3055853783 小时前
课程 9:模型测试记录与 Prompt 策略
linux·人工智能·python·comfyui
为何创造硅基生物3 小时前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
吃好睡好便好3 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
星寂樱易李3 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
仰泳之鹅4 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
qingfeng154154 小时前
企业微信机器人开发:如何实现自动化与智能运营?
人工智能·python·机器人·自动化·企业微信
之歆4 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
cen__y5 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
AI人工智能+电脑小能手5 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm