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

上图为 8 皇后问题的一种解法。
给定一个整数 n,返回 n 皇后不同的解决方案的数量。
解题思路:
和Leetcode 51. N-Queens N皇后一样,都是用回溯法解决,相较于上一题的输出棋盘,这题输出合法棋盘总和相对更简单一点。
空间复杂度O(n)。
代码实现:
class Solution { public int totalNQueens(int n) { int res = 0; int scale = 0, maxScale = n; int[] line = new int[maxScale]; Arrays.fill(line, -1); while (scale >= 0) { if (scale == maxScale) { res ++; scale --; } line[scale] ++; if (check(line, scale)) { scale ++; } else { if (line[scale] >= n) { line[scale] = -1; scale --; } } } return res; } private boolean check(int[] line, int scale) { int k = line[scale]; if (k >= line.length) return false; if (scale == 0) return true; for (int i = 0; i < scale; i ++) { if (k == line[i] || Math.abs(k - line[i]) == Math.abs(scale - i)) return false; } return true; } }
本文探讨了N皇后问题的解决方案数量计算问题,通过回溯法实现了一个有效的算法。介绍了如何确保皇后间不互相攻击的同时统计所有可能的布局方案。
307

被折叠的 条评论
为什么被折叠?



