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)

            

        
相关推荐
jerryinwuhan22 分钟前
《Python数据预处理》第四章
开发语言·python
长江&后浪24 分钟前
防火墙的描述
开发语言·网络·php
观无1 小时前
若依EasyExcel实现单元格合并
开发语言·前端·javascript
雨晨源码(同名B站)1 小时前
基于Python的网易云音乐评论数据情感化分析系统 音乐爬虫信息可视化 |SnowNLP评论情感分析
开发语言·hadoop·爬虫·python·信息可视化·毕业设计
阿童木写作1 小时前
跨境电商图片翻译工具推荐:跨马翻译批量处理视频字幕与抠图
python·音视频
我不是疯子是傻子1 小时前
串口通信数据帧粘包拆包再进化:基于 Qt 的滑动窗口与 CRC 校验实战
开发语言·qt
程序员老陆1 小时前
Qt中实现窗口真全屏(覆盖Windows任务栏)
开发语言·windows·qt
霸道流氓气质2 小时前
Java中信号量(Semaphore):从本地到分布式
java·开发语言·分布式
怪奇云呼军2 小时前
G.711、Opus 和重采样会拖慢识别吗?闪电智能VoiceAgent 的音频入口怎么选
java·人工智能·python·算法·云计算·音视频
ZC跨境爬虫2 小时前
LeetCode 27. 移除元素(双指针详解 + Java Python 多解法对比)
java·python·leetcode