题目解析
题目解析
题目1
51. N 皇后
面试题 08.12. 八皇后
class Solution {
public:
int array[15] = {0};
int max;
vector<char>b;
void print(vector<vector<string>>&ans){
string str="";
vector<string>a;
for(int i=0;i<max;i++){
for(int k=0;k<max;k++){
if(array[i]==k)b.push_back('Q');
else b.push_back('.');
}
for(int k=0;k<max;k++){
str += b[k];
}
a.push_back(str);
b.clear();
str.erase(0);
}
ans.push_back(a);
}
bool judge(int k){
for(int i=0;i<k;i++){
if(array[i]==array[k] || abs(k-i)==abs(array[k]-array[i])){
return false;
}
}
return true;
}
void check(int k,vector<vector<string>>&ans){
if(k==max){
print(ans);
return;
}
for(int i=0;i<max;i++){
array[k]=i;
if(judge(k)){
check(k+1,ans);
}
}
}
vector<vector<string>> solveNQueens(int n) {
vector<vector<string>>ans;
max=n;
check(0,ans);
return ans;
}
};
题目2
52. N皇后 II
class Solution {
public:
int array[15] = {0};
int sum,max;
bool judge(int k){
for(int i=0;i<k;i++){
if(array[i]==array[k] || abs(k-i)==abs(array[k]-array[i])){
return false;
}
}
return true;
}
void check(int k){
if(k==max){
sum++;
return;
}
for(int i=0;i<max;i++){
array[k]=i;
if(judge(k)){
check(k+1);
}
}
}
int totalNQueens(int n) {
max=n;
check(0);
return sum;
}
};