N-Queens Solutions in Java
Number 51
Difficulty Hard
Acceptance 46.8%
Link LeetCode
Solutions
Java solution by liuyubobobo/Play-Leetcode
/// Source : https://leetcode.com/problems/n-queens/description//// Author : liuyubobobo/// Time : 2017-11-18import java.util.Arrays;import java.util.LinkedList;import java.util.List;import java.util.ArrayList;/// Basic Recursive/// Time Complexity: O(n^n)/// Space Complexity: O(n)public class Solution {private boolean[] col;private boolean[] dia1;private boolean[] dia2;private ArrayList<List<String>> res;public List<List<String>> solveNQueens(int n) {res = new ArrayList<List<String>>();col = new boolean[n];dia1 = new boolean[2 * n - 1];dia2 = new boolean[2 * n - 1];LinkedList<Integer> row = new LinkedList<Integer>();putQueen(n, 0, row);return res;}private void putQueen(int n, int index, LinkedList<Integer> row){if(index == n){res.add(generateBoard(n, row));return;}for(int i = 0 ; i < n ; i ++)if(!col[i] && !dia1[index + i] && !dia2[index - i + n - 1]){row.addLast(i);col[i] = true;dia1[index + i] = true;dia2[index - i + n - 1] = true;putQueen(n, index + 1, row);col[i] = false;dia1[index + i] = false;dia2[index - i + n - 1] = false;row.removeLast();}return;}private List<String> generateBoard(int n, LinkedList<Integer> row){assert row.size() == n;ArrayList<String> board = new ArrayList<String>();for(int i = 0 ; i < n ; i ++){char[] charArray = new char[n];Arrays.fill(charArray, '.');charArray[row.get(i)] = 'Q';board.add(new String(charArray));}return board;}private static void printBoard(List<String> board){for(String s: board)System.out.println(s);System.out.println();}public static void main(String[] args) {int n = 4;List<List<String>> res = (new Solution()).solveNQueens(n);for(List<String> board: res)printBoard(board);}}