返回
LeetCode 51:N 皇后解法巧妙解析,刷题打卡!
前端
2023-11-25 05:18:03
序言:
在算法世界中,"N 皇后"问题以其巧妙的解题思路和实战应用价值而备受推崇。本篇文章将带你深入探索 LeetCode 51 "N 皇后"问题的解法,解锁刷题新姿势,为你的算法之旅注入一剂强心剂!
解题思路:
所谓 "N 皇后"问题,是指在一个 N x N 的棋盘上放置 N 个皇后,使它们彼此不能相互攻击。皇后彼此不能攻击的条件是:任何两个皇后都不能处于同一条横行、纵行或斜线上。
而回溯法是解决此类问题的有力武器。其基本框架如下:
- 从第一行第一列开始遍历棋盘;
- 依次尝试将皇后放置在当前位置;
- 如果皇后可以合法放置(不与其他皇后攻击),则继续下一行的遍历;
- 如果当前位置无法合法放置皇后,则回溯到上一个合法放置皇后的位置,并尝试下一列;
- 重复上述过程,直至遍历完整个棋盘或找到所有可行解。
代码实现:
public class NQueens {
private int[] columns; // 记录每行皇后的列号
private int count = 0; // 记录可行解数量
public int totalNQueens(int n) {
columns = new int[n];
backtrack(0);
return count;
}
private void backtrack(int row) {
if (row == columns.length) {
count++;
return;
}
for (int col = 0; col < columns.length; col++) {
if (isValid(row, col)) {
columns[row] = col;
backtrack(row + 1);
}
}
}
private boolean isValid(int row, int col) {
for (int i = 0; i < row; i++) {
if (columns[i] == col || Math.abs(columns[i] - col) == row - i) {
return false;
}
}
return true;
}
}
结语:
通过回溯法的巧妙应用,我们成功破解了 "N 皇后"问题的难题。从解题思路到代码实现,本文深入浅出地剖析了问题的精髓,助力你轻松掌握算法技巧,在刷题的征途上越战越勇!