N-Queens
2015-06-10 10:00
495 查看
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..”]
]
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 List<String[]> list; public List<String[]> solveNQueens(int n) { int [] queenList = new int ; list = new ArrayList<String[]>(); placeQueen(0,queenList); return list; } boolean isSafe(int col,int row,int[] queenList){ int tmpRow = 0; for(int tmpCol = 0; tmpCol < col; tmpCol++){ tmpRow = queenList[tmpCol]; if(tmpRow == row|| tmpRow+tmpCol == row+col||tmpRow-tmpCol==row-col){ return false; } } return true; } boolean placeQueen(int col,int[] queenList){ boolean isFind = false; int n = queenList.length; if(col == n){ // isFind = true; //不设结束条件,继续回溯 String[] s = convert(queenList); list.add(s); } else{ int row = 0; while(row < n&&!isFind){ if(isSafe(col,row,queenList)){ queenList[col] = row; isFind = placeQueen(col+1,queenList); // if(!isFind){ // row++; // } row++; } else{ row++; } } } return isFind; } String [] convert(int [] queenList){ int n = queenList.length; String [] str = new String ; char [] ch = new char ; Arrays.fill(ch,'.'); int k = 0; for(int i = 0; i <n;i++){ k = queenList[i]; ch[k] ='Q'; str[i] = new String(ch); ch[k] ='.'; } return str; } }
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解
- LeetCode [Day 5] Longest Palindromic Substring 题解
- LeetCode [Day 6] ZigZag Conversion 题解
- LeetCode 2: Add Two Numbers (JAVA)
- LeetCode 1: Two Sum (JAVA)