给定一个不含重复数字的数组 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函数的区别vector的remove和erase函数的区别
题解
#include#include #include using namespace std; class Solution { public: void backtrack(vector >& res, vector & output, int first, int len){ // 所有数都填完了 if (first == len) { res.push_back(output); return; } cout< > permute(vector & nums) { vector > res; backtrack(res, nums, 0, (int)nums.size()); return res; } }; int main(){ int a[4]={1,2,3,4}; vector output(a,a+4); vector< vector > res; Solution s; res=s.permute(output); for(int i=0;i class Solution { private: vector> res; void backTracking(vector & nums, vector & 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 > permute(vector & nums) { vector 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/ 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)