做这道题出了很多小问题:
1、v[i][col[i]]=‘Q’ 写成了str[col[i]]=‘Q’ ,殊不知这样不会修改向量中的值
2、回溯的时候,col.pop_back写成了push_back
class Solution {
public:
vector<int> col;
vector<vector<string> > solveNQueens(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<vector<string> > v;
backtrace(0,n,v);
return v;
}
bool check(int t){
for(int i=0;i<t;i++)
if(col[i]==col[t]||abs(i-t)==abs(col[i]-col[t]))
return false;
return true;
}
void backtrace(int row,int n,vector<vector<string> > &vec){
if(row==n){
string str(n,'.');
vector<string> v(n,str);
for(int i=0;i<n;i++)
v[i][col[i]]='Q';
vec.push_back(v);
return;
}
for(int i=0;i<n;i++){
col.push_back(i);
if(check(row))
backtrace(row+1,n,vec);
col.pop_back();
}
}
};