news 2026/5/9 14:35:03

LeetCode N皇后题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode N皇后题解

LeetCode N皇后题解

题目描述

n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。

示例

输入:n = 4
输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]

解题思路

方法:回溯

思路

  • 使用回溯算法来解决这个问题。
  • 维护一个数组cols来记录每一列是否已经有皇后。
  • 维护一个数组diag1来记录主对角线是否已经有皇后。
  • 维护一个数组diag2来记录副对角线是否已经有皇后。
  • 从第一行开始,尝试所有可能的列:
    • 如果当前列、主对角线、副对角线都没有皇后,则放置皇后。
    • 递归处理下一行。
    • 回溯:撤销选择,继续尝试其他列。
  • 当行号等于 n 时,将解决方案加入结果列表。

复杂度分析

  • 时间复杂度:O(n!),这是 n 皇后问题的复杂度。
  • 空间复杂度:O(n),递归调用栈的深度为 n。

代码实现

方法:回溯

# N皇后(回溯) def solve_n_queens(n): result = [] cols = [False] * n diag1 = [False] * (2 * n) diag2 = [False] * (2 * n) board = [['.' for _ in range(n)] for _ in range(n)] def backtrack(row): if row == n: result.append([''.join(row) for row in board]) return for col in range(n): d1 = row - col + n d2 = row + col if cols[col] or diag1[d1] or diag2[d2]: continue cols[col] = diag1[d1] = diag2[d2] = True board[row][col] = 'Q' backtrack(row + 1) board[row][col] = '.' cols[col] = diag1[d1] = diag2[d2] = False backtrack(0) return result # 测试 def test_solve_n_queens(): n = 4 print(solve_n_queens(n)) # 输出:[['..Q.', 'Q...', '...Q', '.Q..'], ['.Q..', '...Q', 'Q...', '..Q.']] if __name__ == "__main__": test_solve_n_queens()

测试用例

测试用例 1:n=4

输入:n = 4
输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]

测试用例 2:n=1

输入:n = 1
输出:[["Q"]]

总结

N皇后是一个经典的回溯算法问题,它可以通过回溯算法来高效地解决。

回溯算法的核心思想是:从第一行开始,尝试所有可能的列,确保不会与其他皇后冲突,递归处理下一行,然后回溯。

掌握回溯算法的使用方法,对于解决类似的问题非常重要。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 14:34:36

有电脑一定要死磕这3个技能!3个月逆袭网络安全

有电脑一定要死磕这 3 个技能!3 个月逆袭网络安全 导语:当下,一台能正常开机的电脑,早已不只是娱乐消遣的工具,更是普通人踏入网络安全领域、解锁职业新可能的敲门砖。如果你正手握电脑,却不知如何发挥其价…

作者头像 李华
网站建设 2026/5/9 14:33:37

CANN PTO Tile-Scalar汇编操作

Tile-Scalar / Tile-Immediate 【免费下载链接】pto-isa Parallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers high-performance, cross-platform tile operations…

作者头像 李华
网站建设 2026/5/9 14:31:29

从源码看本质:扒一扒Java LinkedList里poll()和remove()那点事儿

从源码看本质:扒一扒Java LinkedList里poll()和remove()那点事儿 在Java集合框架中,LinkedList作为List和Deque接口的双重实现,其内部方法的设计哲学值得深入探讨。今天我们把显微镜对准两个看似简单却暗藏玄机的方法——poll()和remove()&am…

作者头像 李华
网站建设 2026/5/9 14:29:29

Excel AVERAGE函数底层逻辑与四大均值函数实战指南

1. 为什么AVERAGE()是Excel里最常被低估、却又最不能绕开的函数在Excel里,我见过太多人一上来就猛敲SUMIFS、INDEX-MATCH甚至写数组公式,结果连自己表格里那组销售数据的真实均值都没算对。不是他们不会用函数,而是没真正吃透AVERAGE()这个看…

作者头像 李华
网站建设 2026/5/9 14:25:31

人们心中的项羽

项羽人生轨迹深度解析:被“取而代”算法锁死的极致战神——一个单核处理器如何燃尽秦末天空与跨时空文化生命考 一、序言:分裂的符号——战神、暴君、或永不熄灭的少年? 在中国历史的星空中,绝大多数星辰的亮度由其位置决定——帝王位居天枢,将相环绕拱卫。但有一颗星,…

作者头像 李华
网站建设 2026/5/9 14:24:30

AI增强的Quanto期权定价:基于广义正态稳定过程与生成式路径模拟

1. 项目概述:当AI遇见复杂衍生品定价最近几年,量化金融圈里最热闹的两个话题,一个是生成式AI的爆发式应用,另一个就是如何给那些结构越来越“妖”的衍生品定个准价。我干了十几年量化交易和模型研发,眼看着期权产品从简…

作者头像 李华