Leetcode之回溯法专题-52. N皇后 II(N-Queens II)

与51题的代码80%一样,只不过52要求解的数量,51求具体解,点击进入51

  1. class Solution {
  2. int ans = 0;
  3.  
  4. public int totalNQueens(int n) {
  5.  
  6. char mp[][] = new char[n][n];
  7. for (int i = 0; i < n; i++) {
  8. for (int j = 0; j < n; j++) {
  9. mp[i][j] = '.';
  10. }
  11. }
  12. dfs(mp, n, 0, 0);
  13. return ans;
  14. }
  15.  
  16. public void dfs(char[][] mp, int len, int i, int queen) {
  17. int x = i / len;
  18. int y = i % len;
  19. if ((x >= len || y >= len)) {
  20. if (queen != len)
  21. return;
  22. ans++;
  23. return;
  24. }
  25. dfs(mp, len, i + 1, queen);
  26. if (ok(mp, len, x, y)) {
  27. mp[x][y] = 'Q';
  28. dfs(mp, len, i + 1, queen + 1);
  29. mp[x][y] = '.';
  30. }
  31.  
  32. }
  33.  
  34. public boolean ok(char[][] mp, int len, int x, int y) {
  35. // check row
  36. for (int i = 0; i < len; i++) {
  37. if (i == y)
  38. continue;
  39. if (mp[x][i] == 'Q')
  40. return false;
  41. }
  42.  
  43. // check col
  44. for (int i = 0; i < len; i++) {
  45. if (i == x)
  46. continue;
  47. if (mp[i][y] == 'Q')
  48. return false;
  49. }
  50.  
  51. // x=1 y=3
  52. int cnt = 0;
  53. int up = 0;
  54. int down = 0;
  55.  
  56. for (int i = y + 1; i < len; i++) {
  57. up = (++cnt) * -1 + x;
  58. down = cnt * 1 + x;
  59.  
  60. if (up < len && up >= 0) {
  61. // System.out.println("mp[up][i]=["+up+"]["+i+"]");
  62. if (mp[up][i] == 'Q')
  63. return false;
  64. }
  65.  
  66. if (down >= 0 && down < len) {
  67. // System.out.println("mp[down][i]=["+down+"]["+i+"]");
  68. if (mp[down][i] == 'Q') {
  69. return false;
  70. }
  71. }
  72. }
  73.  
  74. // System.out.println("other");
  75. cnt = 0;
  76. for (int i = y - 1; i >= 0; i--) {
  77. up = (++cnt) * -1 + x;
  78. down = cnt * 1 + x;
  79.  
  80. if (up < len && up >= 0) {
  81. // System.out.println("mp[up][i]=["+up+"]["+i+"]");
  82. if (mp[up][i] == 'Q')
  83. return false;
  84. }
  85.  
  86. if (down >= 0 && down < len) {
  87. // System.out.println("mp[down][i]=["+down+"]["+i+"]");
  88. if (mp[down][i] == 'Q') {
  89. return false;
  90. }
  91. }
  92. }
  93.  
  94. return true;
  95. }
  96. }

Leetcode之回溯法专题-52. N皇后 II(N-Queens II)的更多相关文章

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

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

  2. Leetcode之回溯法专题-216. 组合总和 III(Combination Sum III)

    Leetcode之回溯法专题-216. 组合总和 III(Combination Sum III) 同类题目: Leetcode之回溯法专题-39. 组合总数(Combination Sum) Lee ...

  3. Leetcode之回溯法专题-212. 单词搜索 II(Word Search II)

    Leetcode之回溯法专题-212. 单词搜索 II(Word Search II) 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单 ...

  4. Leetcode之回溯法专题-131. 分割回文串(Palindrome Partitioning)

    Leetcode之回溯法专题-131. 分割回文串(Palindrome Partitioning) 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. ...

  5. Leetcode之回溯法专题-90. 子集 II(Subsets II)

    Leetcode之回溯法专题-90. 子集 II(Subsets II) 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入 ...

  6. Leetcode之回溯法专题-79. 单词搜索(Word Search)

    Leetcode之回溯法专题-79. 单词搜索(Word Search) 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元 ...

  7. Leetcode之回溯法专题-78. 子集(Subsets)

    Leetcode之回溯法专题-78. 子集(Subsets) 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = ...

  8. Leetcode之回溯法专题-77. 组合(Combinations)

    Leetcode之回溯法专题-77. 组合(Combinations)   给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2 输 ...

  9. Leetcode之回溯法专题-47. 全排列 II(Permutations II)

    Leetcode之回溯法专题-47. 全排列 II(Permutations II) 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例: 输入: [1,1,2] 输出: [ [1,1,2] ...

随机推荐

  1. linux初学者-常用基本命令篇

    linux系统中有着许许多多的命令,并且软件也有可能自带命令,要想全部了解这些命令是很困难的,但是有一些基本命令是在平时的学习工作中应用的很广泛的.以下简要介绍几种linux系统中的常用命令. 1.m ...

  2. 在 Windows 上搭建 PHP 网站

    PHP(全称:PHP:Hypertext Preprocessor,即“PHP:超文本预处理器”)是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用.PHP的语法借鉴吸收C语言. ...

  3. Java核心技术(卷一)读书笔记——第一章(概述)

    1.Java不提供多重继承,通过接口来实现.一个类只能继承一个父类,但是可以同时实现多个接口. 2.Java中的int类型的大小是固定的32位,以避免代码移植时候的不兼容问题.唯一的限制是int类型的 ...

  4. XSS危害——session劫持(转载)

    在跨站脚本攻击XSS中简单介绍了XSS的原理及一个利用XSS盗取存在cookie中用户名和密码的小例子,有些同学看了后会说这有什么大不了的,哪里有人会明文往cookie里存用户名和密码.今天我们就介绍 ...

  5. 【转】解决eclipse连接不到genymotion的问题

    (1)很多朋友在使用genymotion开发安卓应用程序的时候,会遇见完全正确的安装但是在运行的时候仍然找不到,genymotion上的设备,在打开的devices上找不到如下图所示: (2)解决的方 ...

  6. CodeForces 372 A. Counting Kangaroos is Fun

    题意,有n只袋鼠,没每只袋鼠有个袋子,大小为si,一个袋鼠可以进入另外一个袋鼠的袋子里面,当且仅当另一个袋鼠的袋子是他的二倍或二倍一上,然后中国袋鼠就是不可见的,不能出现多个袋鼠嵌套的情况.让你求最少 ...

  7. JVM内存结构 VS Java内存模型 VS Java对象模型

    前面几篇文章中, 系统的学习了下JVM内存结构.Java内存模型.Java对象模型, 但是发现自己还是对这三者的概念和区别比较模糊, 傻傻分不清楚.所以就有了这篇文章, 本文主要是对这三个技术点再做一 ...

  8. 如何在MySQL中输入中文

    解决MySQL中的Incorrect string value MySQL中输入中文:在MySQL建标的时候,直接往表中的varchar(255)中输入中文的话是会报错的,大概是因为数据库的默认编码是 ...

  9. HelloDjango 系列教程:博客从“裸奔”到“有皮肤”

    文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 在此之前我们已经编写了博客的首页视图,并且配置了 URL 和模板,让 django 能够正确地处理 HTTP 请求并返回合适的 ...

  10. 又拍云叶靖:OpenResty 在又拍云存储中的应用

    2019 年 7 月 6 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·上海站,又拍云平台开发部负责人叶靖在活动上做了<OpenRest ...