【力扣hot100题】(061)N皇后
有难度但不多。
想法是使用unordered_set记录每一行和每一条斜线上是否已经存在Q,然后使用回溯即可。
class Solution {
public:
vector<vector<string>> result;
vector<string> r;
int n;
unordered_set<int> column;
unordered_set<int> leftslash;
unordered_set<int> rightslash;
void backtracking(int row){
if(row==n){
result.push_back(r);
return;
}
string s;
for(int i=0;i<n;i++){
if(column.find(i)==column.end()&&leftslash.find(i-row)==leftslash.end()&&rightslash.find(i+row)==rightslash.end()){
column.insert(i);
leftslash.insert(i-row);
rightslash.insert(i+row);
string ss=s+'Q';
ss.append(n-i-1,'.');
r.push_back(ss);
backtracking(row+1);
r.pop_back();
column.erase(i);
leftslash.erase(i-row);
rightslash.erase(i+row);
}
s+='.';
}
}
vector<vector<string>> solveNQueens(int n){
this->n=n;
backtracking(0);
return result;
}
};