class Solution {
public:
vector<vector<string>> solveNQueens(int n) {
if(n==0) return {};
vector<string> out(n, string(n,'.'));
vector<int> visited(n, -1);
vector<vector<string>> res;
helper(n, 0, out, visited, res);
return res;
}
void helper(int n, int row, vector<string>& out, vector<int>& visited, vector<vector<string>>& res){
if(row==n) res.push_back(out);
else{
for(int i=0;i<n;i++){
if(isvalid(visited, row, i)){
visited[row] = i;
out[row][i] = 'Q';
helper(n, row+1, out, visited, res);
out[row][i] = '.';
visited[row] = -1;
}
}
}
}
bool isvalid(vector<int>& visited, int row, int col){
if(visited[row]!=-1) return false;
for(int i=0;i<row;i++){
if(visited[i]==col || abs(row-i)==abs(col-visited[i])) return false;
}
return true;
}
};
pay attention to isvalid
1. abs(row-i)==abs(pos[i]-col) --> check the diagnoal
2.pos[i]==col --> not the same