Total Accepted: 7379 Total Submissions: 29099
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.."] ]public class Solution { public ArrayList<String[]> solveNQueens(int n) { ArrayList<String[]> list = new ArrayList<String[]>(); int[] path = new int[n]; dfs(list, path, n, 0); return list; } public void dfs(ArrayList<String[]> list, int[] path, int n, int level) { if (level == n) { String[] set = new String[n]; for (int i = 0; i < n; i++) { StringBuffer str = new StringBuffer(); for (int j = 0; j < n; j++) { if (path[i] == j) str.append("Q"); else str.append("."); } set[i] = str.toString(); } list.add(set); return; } for (int i = 0; i < n; i++) { path[level] = i; if (check(path, level)) dfs(list, path, n, level + 1); } } public boolean check(int[] path, int level) { for (int i = 0; i < level; i++) { if ((path[i] == path[level]) || Math.abs(path[i] - path[level]) == (level - i)) return false; } return true; } }