leetcode解题方案--051--N-Queens
2017-11-27 21:45
351 查看
题目
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.
For example,
There exist two distinct solutions to the 4-queens puzzle:
[
[“.Q..”, // Solution 1
“…Q”,
“Q…”,
“..Q.”],
[“..Q.”, // Solution 2
“Q…”,
“…Q”,
“.Q..”]
]
分析
递归?或者叫回溯就是不断的试啊,有条件不符合的就返回
class Solution { public static List<List<String>> solveNQueens(int n) { List<List<String>> ret = new LinkedList<>(); boolean[] used = new boolean ; LinkedList<String> list = new LinkedList<>(); HashSet<Integer> diff = new HashSet<>(2*n-1); HashSet<Integer> sum = new HashSet<>(2*n-1); calculate(ret, list, n, used, -65535, diff, sum); return ret; } public static void calculate(List<List<String>> ret, List<String> list, int n, boolean[] used, int lastIndex, HashSet diff, HashSet sum) { if (list.size() == n) { ret.add(list); } for (int i = 0; i<n;i++) { if (!used[i] && i!=lastIndex-1 && i!=lastIndex+1&&!diff.contains(list.size()-i) && !sum.contains(list.size()+i)) { LinkedList<String> listtmp = new LinkedList<>(); listtmp.addAll(list); used[i] = true; diff.add(list.size() - i); sum.add(list.size()+i); StringBuffer str = new StringBuffer(""); for (int j = 0; j<n;j++) { if (j == i) { str.append("Q"); } else { str.append("."); } } listtmp.add(str.toString()); calculate(ret, listtmp, n, used,i,diff, sum); used[i] = false; diff.remove(list.size()-i); sum.remove(list.size()+i); } } } }
相关文章推荐
- leetcode解题方案--016--3 sum closest
- leetcode解题方案--155--min stack
- leetcode解题方案--024--Swap Nodes in Pairs
- leetcode解题方案--028--Divide Two Integers
- leetcode解题方案--082--Remove Duplicates from Sorted ListII
- leetcode解题方案--151--Reverse Words in a String
- leetcode解题方案--031--next-permatation
- leetcode解题方案--069--sqrt(x)
- leetcode解题方案--160--Intersection of Two Linked Lists
- leetcode解题方案--052-- N-Queens II
- N-Queens [Leetcode解题报告]
- 【LeetCode】51.N-Queens(hard)解题报告
- leetcode解题方案--070--Climbing Stairs
- leetcode解题方案--162--Find Peak Element
- leetcode解题方案--054--spiral maxtrix
- leetcode解题方案--064--Minimum Path Sum
- leetcode解题方案--021--Merge Two Sorted Lists
- leetcode解题方案--026--Remove Duplicates from Sorted Array
- [leetcode javascript解题]N-Queens
- leetcode解题方案--039-- CombinationSum