首页 > 代码库 > Leetcode-N-Queens

Leetcode-N-Queens

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.."]]
Have you met this question in a real interview?
 
Analysis:
How to determine whether the current position at jth row is valid? Suppose jth row position is place[j] and ith row position is place[i]. Then we found that place[i] leads three positions at jth row invalid. They are place[i], place[i]+j-i, place[i]-(j-i).
 
Solution:
 1 public class Solution { 2     public List<String[]> solveNQueens(int n) { 3         List<String[]> res = new ArrayList<String[]>(); 4         int[] place = new int[n]; 5         Arrays.fill(place,-1); 6         int level = 0; 7    8         while (level!=-1){ 9             if (level>=n){10                 constructRes(place,res,n);11                 level--;12                 continue;13             }14 15             int val = place[level];16             val++;17             while (val<n){18                 boolean valid = true;19                 for (int i=0;i<level;i++)20                     if (val==place[i] || val==place[i]+level-i || val==place[i]-(level-i)){21                         valid = false;22                         break;23                     }24                 if (valid) break;25                 else val++;26             }27 28             if (val<n){29                 place[level]=val;30                 level++;31             } else {32                 place[level]=-1;33                 level--;34             }35         }36 37         return res;38         39     }40 41     public void constructRes(int[] place, List<String[]> res, int n){42         char[] line = new char[n];43         Arrays.fill(line,‘.‘);44         String[] oneRes = new String[n];45         for (int i=0;i<n;i++){46             int val = place[i];47             line[val]=‘Q‘;48             String lineStr = new String(line);49             line[val]=‘.‘;50             oneRes[i]=lineStr;51         }52         res.add(oneRes);53     }       54 }

 

 
 

Leetcode-N-Queens