本文记录的是刷题过程中的重要概念和笔记。如有侵权,请联系删除。
52. N皇后II
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
上图为 8 皇后问题的一种解法。
51n皇后
给定一个整数 n,返回 n 皇后不同的解决方案的数量。
示例:
输入: 4
输出: 2
解释: 4 皇后问题存在如下两个不同的解法。
解法 1
[ [“.Q…”, “…Q”, “Q…”, “…Q.”],
解法 2
[“…Q.”, “Q…”, “…Q”, “.Q…”] ]
思路
与之前这个基本一致:https://leetcode.cn/problems/n-queens/submissions/
class Solution {
public:
vector<vector<string>> res;
bool isValid(int row, int column, vector<string> chessboard,int n){
for(int i=0;i<row;i++){
if(chessboard[i][column]=='Q') return false;
}
for(int i=row-1,j=column-1;i>=0&&j>=0;i--,j--){
if(chessboard[i][j]=='Q') return false;
}
for(int i=row-1,j=column+1;i>=0&&j<n;i--,j++){
if(chessboard[i][j]=='Q') return false;
}
return true;
}
void backtracing(int n, int lineNum, vector<string>& chessboard){
// lineNum start from 0
if(lineNum==n){
res.push_back(chessboard);
return;
}
for(int i=0;i<n;i++){
if(isValid(lineNum,i,chessboard,n)){
chessboard[lineNum][i]='Q';
backtracing(n,lineNum+1,chessboard);
chessboard[lineNum][i]='.';
}
}
}
vector<vector<string>> solveNQueens(int n) {
res.clear();
vector<string> chessboard(n,string(n,'.'));//
if(n!=0) backtracing(n,0,chessboard);
return res;
}
};