2023.9.10
本题是皇后问题的变式,让求出不同解决方案的数量,和之前做过的 N皇后 基本一样,最终返回ans里棋盘的数量即可。
当复习一下皇后问题了,代码如下:
class Solution {
private:
vector<vector<string>> ans;
//判断当前皇后落点是否合理
bool is_valid(vector<string>&chessboard,int row,int col,int n)
{
//正上方
for(int i=row-1; i>=0; i--)
{
if(chessboard[i][col] == 'Q') return false;
}
//左上方
for(int i=row-1,j=col-1; i>=0&&j>=0; i--,j--)
{
if(chessboard[i][j] == 'Q') return false;
}
//右上方
for(int i=row-1,j=col+1; i>=0&&j<n; i--,j++)
{
if(chessboard[i][j] == 'Q') return false;
}
return true;
}
void backtrack(vector<string>&chessboard,int row,int n)
{
if(row == n)
{
ans.push_back(chessboard);
return;
}
for(int col=0; col<n; col++)
{
if(is_valid(chessboard,row,col,n))
{
chessboard[row][col] = 'Q';
backtrack(chessboard,row+1,n);
chessboard[row][col] = '.';
}
}
}
public:
int totalNQueens(int n) {
vector<string> chessboard(n,string(n,'.'));
backtrack(chessboard,0,n);
return ans.size();
}
};