今天在 leetcode 上做 N-Queens 问题,代码如下,在本地 eclipse 上跑答案正确,但是在 leetcode 上跑时对 n=2 的情况,本应返回空,但却返回 [["Q"]], 很神奇,最起码也应该是长为2的 String 吧(因为每次生成的字符串长度均为 n)
java 代码
public class Solution {
public static ArrayList<String[]> ret = new ArrayList<String[]>();
public int totalNQueens(int n) {
if(n<1){
return 0;
}
String[] rows = new String[n];
int row = 0;
bfsNQueen(row,n, rows, ret);
return ret.size();
}
public void bfsNQueen(int row, int n, String[] rows, ArrayList<String[]> ret) {
if(row == n) {
ret.add(rows.clone());// ***** .clone()
return;
}
for(int col = 0; col<n; col++){
if( isValid(col, row, rows) ){
char[] tmp = new char[n];
Arrays.fill(tmp, '.'); // ***** Arrays.fill()
tmp[col] = 'Q';
rows[row] = String.copyValueOf(tmp); // ***** String.copyValueOf()
}
}
return;
}
public boolean isValid(int col, int curRow, String[] rows){
for(int i=0; i<curRow; i++){
int curCol = rows[i].indexOf("Q");
if (col==curCol)
return false;
if(Math.abs(i-curRow)==Math.abs(col-curCol))
return false;
}
return true;
}
}