Hot100:N 皇后严格增量构建教程
51. N 皇后 最适合用“代码一步一步长出来”的方式学,而不是直接看一个已经想好的模板答案。 这篇教程只保留教学主线:先从最小例子暴露冲突,再写最小 DFS 骨架,先得到第一版正确解,然后一步步优化到列 / 对角线状态版。 题目 n 皇后问题要求在一个 n x n 的棋盘上放置 n 个皇后,使得任意两个皇后都不能互相攻击。 给定整数 n,返回所有不同的放置方案。 每个方案都用一个字符串数组表示,其中: 'Q' 表示皇后 '.' 表示空位 示例 1 输入:n = 4 输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]] 示例 2 输入:n = 1 输出:[["Q"]] 约束 1 <= n <= 9 一步一步把代码逼出来 Step 1:先看最小能暴露冲突的例子 先只问一个很具体的问题: 放下一个皇后以后,到底麻烦在哪里? 看 n = 4。 假设第 0 行把皇后放在第 1 列。 那么后面的行就不再是“随便找一个空格”了,而是立刻多出三类限制: 第 1 列不能再放 一条左上到右下的对角线不能再放 一条右上到左下的对角线不能再放 这个最小例子已经说明了问题的本质: 我们要按某种固定顺序放置皇后 每做一个选择,都会封锁后面的若干位置 这一版还没有代码。 现在这一版能做到: 看清楚题目的冲突结构 但它还缺: ...