领扣LintCode问题答案-33. N皇后问题

目录

  • 33. N皇后问题
  • 鸣谢

33. N皇后问题

n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击(任意两个皇后不能位于同一行,同一列,同一斜线)。

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

每个解决方案包含一个明确的n皇后放置布局,其中“Q”和“.”分别表示一个女王和一个空位置。

样例 1:

输入:1
输出:
[[“Q”]]

样例 2:

输入:4
输出:
[
// Solution 1
[".Q…",
“…Q”,
“Q…”,
“…Q.”
],
// Solution 2
["…Q.",
“Q…”,
“…Q”,
“.Q…”
]
]

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class Solution {/** @param n: The number of queens* @return: All distinct solutions*/public List<List<String>> solveNQueens(int n) {// write your code hereint[] map = new int[n];Arrays.fill(map, -1);List<List<String>> ret = new ArrayList<>();this.solveNQueens(map, 0, ret);return ret;}private void solveNQueens(int[] map, int rowIndex, List<List<String>> ret) {if (rowIndex == map.length) {List<String> oneRet = new ArrayList<>();for (int r = 0; r < map.length; r++) {StringBuilder sb = new StringBuilder();for (int c = 0; c < map.length; c++) {if (map[r] == c) {sb.append("Q");} else {sb.append(".");}}oneRet.add(sb.toString());}ret.add(oneRet);return;}for (int c = 0; c < map.length; c++) {if (this.isValid(map, rowIndex, c)) {map[rowIndex] = c;this.solveNQueens(map, rowIndex + 1, ret);}}map[rowIndex] = -1;}private boolean isValid(int[] map, int rowIndex, int columnIndex) {for (int r = 0; r < rowIndex; r++) {if (map[r] == columnIndex) {return false;}if (Math.abs(rowIndex - r) == Math.abs(columnIndex - map[r])) {return false;}}return true;}
}

原题链接点这里

鸣谢

非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。
欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。

领扣LintCode问题答案-33. N皇后问题相关推荐

  1. 领扣LintCode问题答案-58. 四数之和

    领扣LintCode问题答案-58. 四数之和 目录 58. 四数之和 鸣谢 58. 四数之和 给一个包含n个数的整数数组S,在S中找到所有使得和为给定整数target的四元组(a, b, c, d) ...

  2. 领扣LintCode问题答案-57. 三数之和

    领扣LintCode问题答案-57. 三数之和 目录 57. 三数之和 鸣谢 57. 三数之和 给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三 ...

  3. 领扣LintCode问题答案-2. 尾部的零

    领扣LintCode问题答案-2. 尾部的零 目录 2. 尾部的零 鸣谢 2. 尾部的零 设计一个算法,计算出n阶乘中尾部零的个数 样例 1: 输入: 11 输出: 2 样例解释: 11! = 399 ...

  4. 领扣LintCode问题答案-46. 主元素

    领扣LintCode问题答案-46. 主元素 目录 46. 主元素 鸣谢 46. 主元素 给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一. 你可以假设数组非空,且数组 ...

  5. 领扣LintCode问题答案-29. 交叉字符串

    领扣LintCode问题答案-29. 交叉字符串 目录 29. 交叉字符串 鸣谢 29. 交叉字符串 给出三个字符串:s1.s2.s3,判断s3是否由s1和s2交叉构成. 样例 1: 输入: &quo ...

  6. 领扣LintCode问题答案-17. 子集

    领扣LintCode问题答案-17. 子集 目录 17. 子集 鸣谢 17. 子集 给定一个含不同整数的集合,返回其所有的子集. 子集中的元素排列必须是非降序的,解集必须不包含重复的子集. 样例 1: ...

  7. 领扣LintCode问题答案-15. 全排列

    领扣LintCode问题答案-15. 全排列 目录 15. 全排列 鸣谢 15. 全排列 给定一个数字列表,返回其所有可能的排列. 你可以假设没有重复数字. 样例 1: 输入:[1] 输出: [ [1 ...

  8. 领扣LintCode问题答案-35. 翻转链表

    领扣LintCode问题答案-35. 翻转链表 目录 35. 翻转链表 鸣谢 35. 翻转链表 翻转一个链表 样例 1: 输入: 1->2->3->null 输出: 3->2- ...

  9. 领扣LintCode问题答案-55. 比较字符串

    领扣LintCode问题答案-55. 比较字符串 目录 55. 比较字符串 鸣谢 55. 比较字符串 比较两个字符串A和B,确定A中是否包含B中所有的字符.字符串A和B中的字符都是 大写字母 在 A ...

最新文章

  1. 3.8 激活函数的导数-深度学习-Stanford吴恩达教授
  2. Lucene 中的Tokenizer, TokenFilter学习
  3. xfce4自己使用的主题设置备份以及xfce4默认的壁纸路径
  4. java后台 ajax_ajax提交到java后台之后处理数据的实现
  5. 软件工程概论总结第四章
  6. 好看的文章排版样式(转)
  7. java中random方法取值范围_java中最值的求法,你可能忽略了这种方法了!
  8. HCL打开显示当前系统用户怎么解决_鼠标右键新建没有EXCEL 怎么解决?
  9. 对诺基亚N8有兴趣的可以进来看看
  10. 增量式解析大型XML文件
  11. 高频电子线路实验 03 - | 环形混频与直接调频
  12. 由QQ魔法卡看腾讯的运作模式
  13. 文件传输的服务器软件有哪些,好用的数据传输软件有哪些?专业的数据传输软件排行榜...
  14. mysqldump导出数据备份 --set-gtid-purged=OFF(简明!!)
  15. java 阴阳历,Java基础-有意思的阴阳历互换的算法
  16. W681310RG编解码器芯片Nuvoton新唐科技
  17. 2013年,我的推荐博客汇总
  18. 7-2 查询水果价格 (15 分)
  19. 阿里旺旺自动回复工具开发二
  20. git:SSL证书问题:无法获取本地颁发者证书

热门文章

  1. 在县城投资一家肯德基需要多少钱?
  2. java根据模板导出pdf,并将多个pdf合成一个
  3. event中的stopPropagation和preventDefault
  4. 神奇的超级搜索工具SuperSearchCN
  5. 通过PYTHON爬虫爬取明星的照片和资料
  6. 二、中英文最全的网络安全术语表-学网络安全必备
  7. 英文中1-100表达
  8. 普通文本格式转html
  9. mysql version pom_Maven的pom文件里,类似于这种版本号${spring.version} 是什么意思?...
  10. 苏州OJ c001: 合并同类项