给定一个不含重复数字的数组 nums
,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
输入:nums = [0,1] 输出:[[0,1],[1,0]]
两者区别:push_back传入一个事先存在的元素对象,调用的是拷贝或移动构造来生成这个新压入的元素对象:construct(*des, class_name&|&& x)) emplace_back:多个事先存在的对象,调用示义:construct(*des, other_type &x|&&x, type_name &|&&,...) emplace_back传参不定,编译器需要在调用时才生成具体的实现,push_back只是emplace_back的两个偏移化版本! push_back只能用类中的拷贝或移动构造,而emplace_back还可以是类中的其他多参数的构造函数,这是优点也是缺点(代码翻倍)&&在普通函数中作为参数时,是万能引用,并不是右值引用,在函数体中会使用forward完美转发,调用时是复制或移动和你传的值有关,你传左值它就用左值版本,传右值就用右值版本。
vector的remove和erase函数的区别
题解
#include<cstdio>
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
void backtrack(vector<vector<int> >& res, vector<int>& output, int first, int len){
// 所有数都填完了
if (first == len) {
res.push_back(output);
return;
}
cout<<first<<endl;
for (int i = first; i < len; ++i) {
// 动态维护数组
swap(output[i], output[first]);
cout<<"交换i first-----"<<i<<"----- "<<first<<endl;
// 继续递归填下一个数
backtrack(res, output, first + 1, len);
// 撤销操作
swap(output[i], output[first]);
}
}
vector<vector<int> > permute(vector<int>& nums) {
vector<vector<int> > res;
backtrack(res, nums, 0, (int)nums.size());
return res;
}
};
int main(){
int a[4]={1,2,3,4};
vector<int>output(a,a+4);
vector< vector<int> > res;
Solution s;
res=s.permute(output);
for(int i=0;i<res.size();i++){
for(int j=0;j<res[i].size();j++)
cout<<res[i][j]<<" ";
cout<<endl;
}
return 0;
}
class Solution {
private:
vector<vector<int>> res;
void backTracking(vector<int>& nums, vector<int>& chosen) {
// base case
if (!nums.size()) {
res.push_back(chosen);
}
for (int i = 0; i < nums.size(); i++) {
// choose
int cur = nums[i];
chosen.push_back(cur);
nums.erase(nums.begin() + i);
// explore
backTracking(nums, chosen);
// unchoose
chosen.pop_back();
nums.insert(nums.begin() + i, cur);
}
}
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<int> chosen;
backTracking(nums, chosen);
return res;
}
};
作者:carpe-diem-ew
链接:https://leetcode-cn.com/problems/permutations/solution/hui-su-fa-si-lu-by-carpe-diem-ew-6zji/