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)

            

        
相关推荐
前端精髓9 小时前
langchain 短期记忆(状态)动态运行时上下文
python·langchain
程序猿乐锅9 小时前
万字详解Single-flight(单飞模式)
java·开发语言·分布式·后端·学习·single-flight
最强小杰9 小时前
DeepSeek V4 Flash + Codex CLI 接入教程:原生 Responses API 适配,从配置到跑通收藏这篇就够了(2026)
java·前端·python·ai
DeepVisionary10 小时前
为拿并网许可,OpenAI在佐治亚新园区同意高峰期断电三成
python·自动化
揽星河..10 小时前
【C语言】指针
c语言·开发语言
小小数媒成员10 小时前
UGUI原理(一)
开发语言·游戏·unity·游戏引擎
VIP_CQCRE11 小时前
内容自动化越跑越乱?先补上状态、去重和失败恢复
python·ai·工作流·幂等设计·内容自动化
速易达网络11 小时前
Three.js 动画入门教学:从场景搭建到流畅动效
开发语言·javascript·ecmascript
福大大架构师每日一题11 小时前
excelize v2.11.1发布:Go 1.26.0起步,16项安全修复与嵌入对象能力全面升级
开发语言·安全·golang