C++第二阶段——数据结构和算法,之前学过一点点数据结构,当时是基于Python来学习的,现在基于C++查漏补缺,尤其是树的部分。这一部分计划一个月,主要利用代码随想录来学习,刷题使用力扣网站,不定时更新,欢迎关注!
文章目录
- 一、46. 全排列
- 二、47.全排列 II
一、46. 全排列
class Solution {
public:
vector<vector<int>> result;
vector<int> path;
vector<vector<int>> permute(vector<int>& nums) {
result.clear();
path.clear();
vector<bool> used(nums.size(),false);
insertV(nums,used);
return result;
}
void insertV(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;
}
path.push_back(nums[i]);
used[i]=true;
insertV(nums,used);
used[i]=false;
path.pop_back();
}
}
};
二、47.全排列 II
class Solution {
public:
vector<vector<int>> result;
vector<int> path;
vector<vector<int>> permuteUnique(vector<int>& nums) {
result.clear();
path.clear();
vector<bool> used(nums.size(),false);
sort(nums.begin(),nums.end());
insertV(nums,used);
return result;
}
void insertV(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(i!=0&&nums[i]==nums[i-1]&&used[i-1]==false){
continue;
}
if(used[i]==false){
path.push_back(nums[i]);
used[i]=true;
insertV(nums,used);
used[i]=false;
path.pop_back();
}
}
}
};