LeetCode——N-Queens II
2014-10-29 11:16
267 查看
Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
![](http://www.leetcode.com/wp-content/uploads/2012/03/8-queens.png)
原题链接:https://oj.leetcode.com/problems/n-queens-ii/
题目:求有多少个独立的解决方案。
与上题一致,只要每次成功后记录一下次数即可。
package leetcode;
import java.util.ArrayList;
import java.util.List;
public class NQueensII {
public static void main(String[] args) {
System.out.println(new NQueensII().totalNQueens(5));
}
int res = 0;
public int totalNQueens(int n) {
List<String[]> result = new ArrayList<String[]>();
List<Integer> cols = new ArrayList<Integer>();
if(n <= 0)
return 0;
search(result,cols,n);
return res;
}
public void search(List<String[]> result,List<Integer> cols,int n){
if(cols.size() == n){
result.add(draw(cols));
res++;
return;
}
for(int col=0;col<n;col++){
if(!isValid(cols,col))
continue;
cols.add(col);
search(result,cols,n);
cols.remove(cols.size()-1);
}
}
public String[] draw(List<Integer> cols){
String[] chess = new String[cols.size()];
for(int i=0;i<chess.length;i++){
chess[i] = "";
for(int j=0;j<cols.size();j++){
if(j==cols.get(i))
chess[i] += "Q";
else
chess[i] += ".";
}
}
return chess;
}
public boolean isValid(List<Integer> cols,int col){
int row = cols.size();
for(int i=0;i<row;i++){
if(cols.get(i) == col)
return false;
if(i - cols.get(i) == row - col)
return false;
if(i+cols.get(i) == row+col)
return false;
}
return true;
}
}
Now, instead outputting board configurations, return the total number of distinct solutions.
![](http://www.leetcode.com/wp-content/uploads/2012/03/8-queens.png)
原题链接:https://oj.leetcode.com/problems/n-queens-ii/
题目:求有多少个独立的解决方案。
与上题一致,只要每次成功后记录一下次数即可。
package leetcode;
import java.util.ArrayList;
import java.util.List;
public class NQueensII {
public static void main(String[] args) {
System.out.println(new NQueensII().totalNQueens(5));
}
int res = 0;
public int totalNQueens(int n) {
List<String[]> result = new ArrayList<String[]>();
List<Integer> cols = new ArrayList<Integer>();
if(n <= 0)
return 0;
search(result,cols,n);
return res;
}
public void search(List<String[]> result,List<Integer> cols,int n){
if(cols.size() == n){
result.add(draw(cols));
res++;
return;
}
for(int col=0;col<n;col++){
if(!isValid(cols,col))
continue;
cols.add(col);
search(result,cols,n);
cols.remove(cols.size()-1);
}
}
public String[] draw(List<Integer> cols){
String[] chess = new String[cols.size()];
for(int i=0;i<chess.length;i++){
chess[i] = "";
for(int j=0;j<cols.size();j++){
if(j==cols.get(i))
chess[i] += "Q";
else
chess[i] += ".";
}
}
return chess;
}
public boolean isValid(List<Integer> cols,int col){
int row = cols.size();
for(int i=0;i<row;i++){
if(cols.get(i) == col)
return false;
if(i - cols.get(i) == row - col)
return false;
if(i+cols.get(i) == row+col)
return false;
}
return true;
}
}
相关文章推荐
- LeetCode刷题笔录N-Queens II
- LeetCode | N-Queens II
- leetcode 127: N-Queens II
- leetcode 52. N-Queens II
- Leetcode 52. N-Queens II (Hard) (cpp)
- (Java)LeetCode-52. N-Queens II
- [LeetCode] N-Queens II
- [Leetcode] N-Queens II
- N-Queens II--LeetCode
- LeetCode 52. N-Queens II(N皇后)
- LeetCode 52. N-Queens II 题解(C++)
- LeetCode 101 N-Queens II
- leetcode 052 —— N-Queens II
- LeetCode-N-Queens II
- Leetcode: N-Queens II
- LeetCode No.52 N-Queens II
- [Leetcode] 52. N-Queens II 解题报告
- LeetCode 51 N-Queens II
- LeetCode 51 - N-Queens II
- [leetcode] N-Queens II