您的位置:首页 > 产品设计 > UI/UE

lintcode-medium-N Queens II

2016-04-01 16:32 531 查看
Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.

Example

For n=4, there are 2 distinct solutions.

class Solution {
/**
* Calculate the total number of distinct N-Queen solutions.
* @param n: The number of queens.
* @return: The total number of distinct solutions.
*/
public int totalNQueens(int n) {
//write your code here

ArrayList<ArrayList<String>> result = new ArrayList<ArrayList<String>>();

if(n <= 0)
return 0;

int[] position = new int
;

helper(result, 0, position, n);

return result.size();
}

public void helper(ArrayList<ArrayList<String>> result, int row, int[] position, int n){

if(row == n){
ArrayList<String> solution = new ArrayList<String>();
for(int i = 0; i < n; i++){
StringBuilder line = new StringBuilder();

for(int j = 0; j < n; j++){
if(j == position[i])
line.append('Q');
else
line.append('.');
}

solution.add(line.toString());
}

result.add(new ArrayList<String>(solution));
return;
}

for(int i = 0; i < n; i++){
position[row] = i;
if(valid(position, row, n))
helper(result, row + 1, position, n);
}

return;
}

public boolean valid(int[] position, int row, int n){

for(int i = row - 1; i >= 0; i--){
if(position[row] == position[i] || Math.abs(position[row] - position[i]) == row - i)
return false;
}

return true;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: