Leetcode 51. N-Queens
2017-01-06 11:52
429 查看
public class Solution { public static boolean canPlace(int row, int col, List<Integer> loc) { // new Queen is at column of some other Queen which is not a valid position, // make sure that there is no duplicate in the loc list if (loc.contains(col)) return false; // new Queen is at the diagonal of some other Queen, // if |i - j| == |loc[i] - loc[j]| means tow Queens are at same diagonal for (int i=0; i<loc.size(); i++) if (Math.abs(i - loc.size()) == Math.abs(loc.get(i) - col)) return false; return true; } public static void nQueens(int n, int row, List<Integer> loc, List<String> list, List<List<String>> ret) { if (row == n) { ret.add(new ArrayList<>(list)); // reaches end, add the current string list to the result return; } else { for (int col=0; col<n; col++) { // search from column 0 to column n-1 for a given row if (canPlace(row, col, loc)) { loc.add(col); char[] tmp = new char ; Arrays.fill(tmp, '.'); tmp[col] = 'Q'; String tmpString = new String(tmp); list.add(tmpString); nQueens(n, row+1, loc, list, ret); // move to the next row list.remove(list.size()-1); loc.remove(loc.size()-1); } } } } public List<List<String>> solveNQueens(int n) { List<List<String>> ret = new ArrayList<>(); nQueens(n, 0, new ArrayList<Integer>(), new ArrayList<String>(), ret); //System.out.println(cnt); return ret; } }
相关文章推荐
- leetCode 51. N-Queens | 回溯问题(N皇后问题) | hard
- LeetCode 51 N-Queens
- LeetCode 51 - N-Queens
- [leetcode]51. N-Queens
- leetcode-51-N-Queens
- leetcode51/52-N-Queens I/II(n皇后问题)
- LeetCode | 51.N-Queens
- LeetCode51 N-Queens
- LeetCode 51. N-Queens
- LeetCode_51---N-Queens
- LeetCode 51. N-Queens
- 【LeetCode】51.N-Queens(hard)解题报告
- leetcode解题笔记 51.N-Queens [Hard]
- LeetCode 51. N-Queens(N皇后问题Ⅰ)
- leetCode 51.N-Queens (n皇后问题) 解题思路和方法
- N 皇后问题 : Leetcode 51. N-Queens
- Leetcode 51. N-Queens
- 【一天一道LeetCode】#51. N-Queens
- LeetCode 51. N-Queens 题解
- LeetCode-51. N-Queens (JAVA)(打印N皇后解集)