052. N皇后II,二哥的LeetCode 刷题笔记,星球专栏
鲁迅曾说过,有过 N 皇后的经验后,这道题就是纯粹的送分题了,因为题目的核心解法是完全一样的,只不过这道题目只需要返回方案的个数而已。上一道题要求返回的是具体的方案,换句话说,只需要在上一道题目的基础上稍作修改即可。
题意
n 皇后问题 研究的是如何将 n 个皇后放置在 n × n 的棋盘上,并且使皇后彼此之间不能相互攻击。
可以参考上一题:051.N 皇后
给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。
难度
困难
示例
示例 1:
输入:n = 4
输出:2
解释:如上图所示,4 皇后问题存在两个不同的解法。
示例 2:
输入:n = 1
输出:1
分析 1
在051.N皇后 中,我们已经将递归+回溯讲得很清楚了,如果理解了 051. N 皇后,这道题目只能算是一个弱化版本,因为我们已经把方案求解出来了,这道题只需要返回方案的个数即可。
只需要简单改几个地方,先来看题解。
class Solution {
// 记录解的数量
int solutions = 0;
// 解决 N 皇后问题
public int totalNQueens(int n) {
// 初始化棋盘
char[][] board = new char[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
board[i][j] = '.';
}
}
// 开始递归查找所有解
backtrack(board, 0, n);
return solutions;
}
// 回溯方法
private void backtrack(char[][] board, int row, int n) {
// 如果已成功放置完所有皇后,将当前棋盘方案加入 solutions
if (row == n) {
solutions = solutions + 1;
return;
}
...真诚点赞 诚不我欺
回复