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

Given an integer n, return all distinct solutions to the n-queens puzzle.

Each solution contains a distinct board configuration of the n-queens' placement, where 'Q'and '.' both indicate a queen and an empty space respectively.

Example:

  1. Input: 4
  2. Output: [
  3. [".Q..", // Solution 1
  4. "...Q",
  5. "Q...",
  6. "..Q."],
  7.  
  8. ["..Q.", // Solution 2
  9. "Q...",
  10. "...Q",
  11. ".Q.."]
  12. ]
  13. Explanation: There exist two distinct solutions to the 4-queens puzzle as shown above.
 

注意:任意斜线也不能有两个Q

  1. class Solution {
  2. public List<List<String>> solveNQueens(int n) {
  3. List<String> ans = new ArrayList<String>();
  4. //initialize ans
  5. for(int i = 0; i < n; i++){
  6. StringBuilder s = new StringBuilder();
  7. for(int j = 0; j < n; j++){
  8. s.append(".");
  9. }
  10. ans.add(s.toString());
  11. }
  12.  
  13. dfs(n,0,ans);
  14. return ret;
  15. }
  16.  
  17. public void dfs(int n, int depth, List<String> ans){
  18.  
  19. if(depth == n) {
  20. List<String> new_ans = new ArrayList<String>(ans);
  21. ret.add(new_ans);
  22. return;
  23. }
  24. StringBuilder strBuilder = new StringBuilder(ans.get(depth));
  25. for(int i = 0; i < n; i++){
  26. if(check(n, ans, depth, i)) continue; //already have Q in this column
  27.  
  28. strBuilder.setCharAt(i, 'Q');
  29. ans.set(depth, strBuilder.toString());
  30. dfs(n, depth+1, ans);
  31. strBuilder.setCharAt(i, '.'); //recover
  32. ans.set(depth, strBuilder.toString());
  33. }
  34. }
  35.  
  36. public Boolean check(int n, List<String> ans, int i, int j){
  37. for(int k = 0; k < i; k++){ //iterate n line
  38. //i-k = j-x => x = j+k-i; i-k = x-j => x = i+j-k
  39. if( ans.get(k).charAt(j) == 'Q'
  40. ||(j+k-i >= 0 && ans.get(k).charAt(j+k-i) == 'Q')
  41. || (i+j-k < n && ans.get(k).charAt(i+j-k) == 'Q'))
  42. return true;
  43. }
  44.  
  45. return false;
  46. }
  47.  
  48. private List<List<String>> ret = new ArrayList<>();
  49. }

51. N-Queens (JAVA)的更多相关文章

  1. CXF错误:Unsupported major.minor version 51.0,java.lang.UnsupportedClassVersionErro

    CXF错误:Unsupported major.minor version 51.0 java.lang.UnsupportedClassVersionError >>>>&g ...

  2. 第51章:Java操作MongoDB-[Mongo-Java-2.x]

    ①范例:连接数据库 package cn.mldn.demo; import com.mongodb.DB; import com.mongodb.MongoClient; public class ...

  3. 第51节:Java当中的集合框架Map

    简书作者:达叔小生 Java当中的集合框架Map 01 Map提供了三个集合视图: 键集 值集 键-值 映射集 public String getWeek(int num){ if(num<0 ...

  4. java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli : Unsupported major.minor version 51

    http://blog.csdn.net/e_wsq/article/details/52100234 一日换了一下MyEclipse,换成2016CI,结果从SVN上下载了一个工程后出现以下错误: ...

  5. java.lang.UnsupportedClassVersionError: org/openqa/selenium/WebDriver : Unsupported major.minor version 51.0

    周一上班,正常打开myeclipse,随便写了一个main方法执行.发现报错了... 问题提示如下: java.lang.UnsupportedClassVersionError: org/openq ...

  6. Java运行 Unsupported major.minor version 51.0 错误

    今天写了简单的Java程序,运行的时候不知道为啥出现这个问题 happy@happy-HP-Compaq-dx7518-MT:~/Study/CrazyJava$ java FieldTest Exc ...

  7. 记一次jdk升级引起的 Unsupported major.minor version 51.0

    之前jdk 一直是1.6,tomcat 是6.x 版本,, 现在引入的新的jar, 出现 Caused by: java.lang.UnsupportedClassVersionError: org/ ...

  8. myeclipse 无法启动 java.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).

    把myeclipse10 按照目录完整拷贝到了另外一台电脑, 另外的目录 原安装目录 D\:\soft\i\myeclipse10 新安装目录 E\:\soft\myeclipse10 双击启动失败, ...

  9. 【java.lang.UnsupportedClassVersionError】版本不一致出错

    这种错误的全部报错信息: java.lang.UnsupportedClassVersionError: org/apache/lucene/store/Directory : Unsupported ...

  10. 为何JAVA虚函数(虚方法)会造成父类可以"访问"子类的假象?

      首先,来看一个简单的JAVA类,Base. 1 public class Base { 2 String str = "Base string"; 3 protected vo ...

随机推荐

  1. leetcode378 有序矩阵中第k小的元素

    排序后取数组第k个元素,遍历需要n^2的复杂度,查找插入logn,时间复杂度O(n^2logn).方法很笨,完全就是STL过于牛x运行通过的. class Solution { public: int ...

  2. Cortex-M3 咬尾中断 与 晚到中断

    [咬尾中断]在处理器在响应某些异常时,如果又发生其他异常,但它们优先级不够高,则它们会被阻塞. 那么,在当前的异常执行返回后,系统处理悬起的异常时,倘若还是先POP,然后又把POP处理的内容PUSH回 ...

  3. LC 499. The Maze III 【lock,hard】

    There is a ball in a maze with empty spaces and walls. The ball can go through empty spaces by rolli ...

  4. RGB颜色透明度转换

    100% — FF95% — F290% — E685% — D980% — CC75% — BF70% — B365% — A660% — 9955% — 8C50% — 8045% — 7340% ...

  5. C#session配置

    web Form 网页是基于HTTP的,它们没有状态, 这意味着它们不知道所有的请求是否来自同一台客户端计算机,网页是受到了破坏,以及是否得到了刷新,这样就可能造成信息的丢失. 于是, 状态管理就成了 ...

  6. JetBrain系列学生免费授权

    1.访问网址:https://www.jetbrains.com/zh/student/ 2.往下滚动,点击立即申请 3.填写邮箱信息 4.确认后,跳转到Thank you页面,上面说已经给注册邮箱发 ...

  7. 【URL 的编码、解码】

    工具类 /** * URLEncodeTest.java * weixinTest * * Function: TODO * * ver date author * ───────────────── ...

  8. android webview 添加内置对象

    package com.android.EBrowser; import android.app.Activity;import android.graphics.Rect;import androi ...

  9. 安卓的一些UI美化框架的使用

    目录 一.前言 二.Android-Bootstrap 三.Sweet Alert Dialog 四.ExplosionField 一.前言 在这里记录一些用到过的觉得还算不错的UI第三方开源美化框架 ...

  10. Identification of Encryption Algorithm Using Decision Tree

    本文主要做了两件事,一是提出了一种使用C4.5算法生成的决策树来识别密文所使用的加密算法的方法,二是为这一算法设计了一个特征提取系统提取八个特征作为算法的输入,最终实现了70%~75的准确率. 准备工 ...