46. 全排列

Introduction

Question:46. 全排列

Analysis

由于序列是没有重复数字的,所以一个简单的回溯即可。

Implement

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
vector<vector<int>> permute(vector<int>& nums) {
if (nums.size() == 0) return {};
else if (nums.size() == 1) return {{nums[0]}};
vector<vector<int>> res;
vector<int> pre;
permute(res, nums, pre, 0);
return res;
}
void permute(vector<vector<int>> &res, vector<int> &nums, vector<int> &pre, int index) {
if (index == nums.size()) {
res.push_back(pre);
return;
}
pre.push_back(nums[index]);
permute(res, nums, pre, index + 1);
for(int i = index + 1;i < nums.size(); i++) {
swap(nums[index], nums[i]);
pre[index] = nums[index];
permute(res, nums, pre, index + 1);
swap(nums[index], nums[i]);
}
pre.pop_back();
}

One More Thing