51. N皇后

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

上图为 8 皇后问题的一种解法。

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

每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。

示例:

输入: 4

输出: [

[".Q…", // 解法 1

“…Q”,

“Q…”,

“…Q.”],

["…Q.", // 解法 2

“Q…”,

“…Q”,

“.Q…”]

]

解释: 4 皇后问题存在两个不同的解法。

class Solution {
public static List<List<String>> output;
public List<List<String>> solveNQueens(int n) {
output = new ArrayList<>();
// 声明一个长度为n的数组用来代表 第n行棋子是在第result[n]列
int[] result = new int [n];
calnQueens(0, n, result);
return output;
} // n 皇后问题 row代表计算到了到第row行
private static void calnQueens(int row, int n, int[] result){
if (row == n){
// 到达第n行代表已经得到一个将解决方案 直接返回即可
// 根据result数组将结果加入到output列表中
getPrint(result);
return;
}
// 若不是第n行 则说明需要继续判断该行棋子应该在那一列
for (int column = 0; column < n; column++){
// 判断第row行 放置在column列的棋子是否满足要求
if (isOK(row, column, result)){
result[row] = column;
// 递归判断下一行的情况
calnQueens(row + 1, n, result);
}
// 不满足要求 回溯下一列 对应操作column++
}
} // row代表行数 column代表列数 result代表满足规则的棋子在第n行中的位置
private static boolean isOK(int row, int column, int[] result){
// 判断棋子的位置是否正确 不正确返回false
for (int i = 0; i < row; i++){
// 第一个条件排除的是相同列的问题
// 第二个条件排除的是对角线列的左下角
// 第三个条件排除的是对角线列的右下角
if (column == result[i] || column == result[i] - row + i || column == result[i] + row - i){
return false;
}
}
return true;
} private static void getPrint(int[] result){
List<String> one = new ArrayList<>();
for (int row = 0; row < result.length; row++){
// 一行一个StringBuilder
StringBuilder str = new StringBuilder();
for (int column = 0; column < result.length; column++){
if (column == result[row]){
str.append("Q");
}else{
str.append(".");
}
}
one.add(str.toString());
}
output.add(one);
}
}

Java实现 LeetCode 51 N皇后的更多相关文章

  1. leetcode 51. N皇后 及 52.N皇后 II

    51. N皇后 问题描述 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后 ...

  2. Java实现 LeetCode 52 N皇后 II

    52. N皇后 II n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回 n 皇后不同的解决方案 ...

  3. [leetcode]51. N-QueensN皇后

    The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...

  4. LeetCode 51. N-QueensN皇后 (C++)(八皇后问题)

    题目: The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two que ...

  5. leetcode 51 N皇后问题

    代码,由全排列转化而来,加上剪枝,整洁的代码: 共有4个变量,res(最终的结果),level,当前合理的解,n皇后的个数,visit,当前列是否放过皇后,由于本来就是在新的行方皇后,又通过visit ...

  6. Leetcode之回溯法专题-51. N皇后(N-Queens)

    Leetcode之回溯法专题-51. N皇后(N-Queens) n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给 ...

  7. Java for LeetCode 216 Combination Sum III

    Find all possible combinations of k numbers that add up to a number n, given that only numbers from ...

  8. Java for LeetCode 214 Shortest Palindrome

    Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. ...

  9. Java for LeetCode 212 Word Search II

    Given a 2D board and a list of words from the dictionary, find all words in the board. Each word mus ...

随机推荐

  1. [hdu1847]博弈,推理

    题意:一堆石子,有n个,两个人轮流取,每次都只能取2的幂次方个数,不能取的人输 思路:首先0是必败态,2的所有幂次都是必胜态.由于选的数模3只能是1或2,恰好又都是2的幂次,0,.3都为必败态,猜想3 ...

  2. 【csu oj 1542】线段树

    题目大意:给定一个合法的括号序列(只包含'(',')'),有q次操作,对每次操作改变一个位置的括号,求最左端的位置,使得改变这个位置上的括号以后,新序列合法(完全配对). 思路:对于合法的括号序列,如 ...

  3. python 基础应用4

    1.列表所有元素全部单独输出 #所有元素全部单独输出 li = [1,2,3,'taibai',[4,5,6,'taibaia']] for i in li: if type(i) == list: ...

  4. Mysql 常用函数(23)- sign 函数

    Mysql常用函数的汇总,可看下面系列文章 https://www.cnblogs.com/poloyy/category/1765164.html sign 的作用 返回参数的符号 sign 的语法 ...

  5. hadoop与spark的处理技巧(一)Top N处理技巧

    1.MR的topN处理方案,假设所有输入Key都唯一 2.MR的topN处理方案,假设输入Key不唯一 3.spark的topN处理方案,假设所有输入Key都唯一,不使用top()和takeOrder ...

  6. ArrrayList底层代码的实现

    定义变量 首先要想实现该块代码,必须定义三个私有变量. private Object[] elementData;该变量用来存储容器中元素的个数. private int size:该变量表示当前容器 ...

  7. CPU 多核指令 —— WFE 原理【原创】

    转自:http://tinylab.org/arm-wfe/ Zhang Binghua 创作于 2020/05/19 打赏 微信公众号   知识星球 关注 @泰晓科技 与数千位一线 Linux 工程 ...

  8. fastDFS多线程并发执行出现的问题

    ---------------------  原作者:Java高级开发  来源:CSDN  原文:https://blog.csdn.net/hang1995/article/details/7924 ...

  9. Excel导出到DataSet

    #region 导入excel 返回Dataset public DataSet ExecleDataSet(string filename, string file, string Type) { ...

  10. python—day01_环境安装

    搭建环境 1.win10_X64,其他Win版本也可以. 2.安装python.()3.PyCharm版本:Professional-2016.2.3. 在Windows上安装Python 首先,根据 ...