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)

            

        
相关推荐
Scott9999HH7 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社8 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海8 小时前
python 列表、元组、集合和字典
开发语言·python
二十雨辰8 小时前
[爬虫]-Urllib
爬虫·python
萧瑟余晖9 小时前
JDK 26 新特性详解
java·开发语言
马优晨9 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
玉鸯10 小时前
Agent Hook:在概率推理之上,为 Agent 叠加确定性控制
python·langchain·agent
weixin_4462608511 小时前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask
我的xiaodoujiao11 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest