跳到主要内容

46 全排列

https://leetcode.cn/leetbook/read/top-interview-questions-medium/xvqup5/

cost: 23m5s

class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> res;
list<int> list;
this->walk(res, nums, 0, list);
return res;
}

private:
void walk(vector<vector<int>>& res, vector<int>& nums, int k,
list<int>& list) {
if (k == nums.size()) {
res.emplace_back(list.begin(), list.end());
return;
}
vector<int> tmp(list.begin(), list.end());
for (const int v : tmp) {
auto it = std::find(list.begin(), list.end(), v);
list.insert(it, nums[k]);
this->walk(res, nums, k + 1, list);
list.remove(nums[k]);
}
list.push_back(nums[k]);
this->walk(res, nums, k + 1, list);
list.pop_back();
}
};