491.非递减子序列
在本层去重就可以,没想到
代码如下:
class Solution {
public:
vector<vector<int>> result;
vector<int> path;
int eleNum = 0;
void getResult(vector<int>& nums, int startIndex){
if(eleNum >= 2) result.push_back(path);
unordered_set<int> mySet;
for(int i = startIndex; i < nums.size(); i++){
if(!path.empty() && nums[i] < path.back() || mySet.find(nums[i]) != mySet.end()) continue;
mySet.insert(nums[i]);
path.push_back(nums[i]);
eleNum++;
getResult(nums, i + 1);
eleNum--;
path.pop_back();
}
}
vector<vector<int>> findSubsequences(vector<int>& nums) {
getResult(nums, 0);
return result;
}
};
46.全排列
学会了bool数组的使用。。
代码如下:
class Solution {
public:
vector<vector<int>> result;
vector<int> path;
void getResult(vector<int>& nums, vector<bool>& used){
if(path.size() == nums.size()){
result.push_back(path);
return;
}
for(int i = 0; i < nums.size(); i++){
if(used[i] == true) continue;
used[i] = true;
path.push_back(nums[i]);
getResult(nums, used);
used[i] = false;
path.pop_back();
}
}
vector<vector<int>> permute(vector<int>& nums) {
vector<bool> used(nums.size(), false);
getResult(nums, used);
return result;
}
};
47.全排列Ⅱ
前两题的融合版。
代码如下:
class Solution {
public:
vector<vector<int>> result;
vector<int> path;
void getResult(vector<int>& nums, vector<bool>& used){
if(path.size() == nums.size()){
result.push_back(path);
return;
}
unordered_set<int> usedThisFloor;
for(int i = 0; i < nums.size(); i++){
if(used[i] == true || usedThisFloor.find(nums[i]) != usedThisFloor.end()) continue;
used[i] = true;
path.push_back(nums[i]);
usedThisFloor.insert(nums[i]);
getResult(nums, used);
used[i] = false;
path.pop_back();
}
}
vector<vector<int>> permuteUnique(vector<int>& nums) {
vector<bool> used(nums.size(), false);
getResult(nums, used);
return result;
}
};
51.N皇后
自己没想出,抄的答案。
代码如下:
class Solution {
public:
vector<vector<string>> result;
void getResult(int n, vector<string>& chessBord, int row){
if(row == n){
result.push_back(chessBord);
return;
}
for(int col = 0; col < n; col++){
if(isValid(row, col, chessBord, n)){
chessBord[row][col] = 'Q';
getResult(n, chessBord, row + 1);
chessBord[row][col] = '.';
}
}
}
bool isValid(int row, int col, vector<string>& chessBord, int n){
for(int i = 0; i < row; i++){
if(chessBord[i][col] == 'Q') return false;
}
for(int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--){
if(chessBord[i][j] == 'Q')return false;
}
for(int i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++){
if(chessBord[i][j] == 'Q')return false;
}
return true;
}
vector<vector<string>> solveNQueens(int n) {
std::vector<std::string> chessBord(n, std::string(n, '.'));
getResult(n, chessBord, 0);
return result;
}
};