LeetCode OJ-46.Permutations(全排列问题)
题目描述
Given a collection of distinct numbers, return all possible permutations.
For example,
[1,2,3]
have the following permutations:
[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
Subscribe to see which companies asked this question
题目理解
单纯的全排列问题,使用字典序排序即可解决,字典序排序在上文中已记录,详情见http://blog.csdn.net/tobebetterprogrammer/article/details/54138105。
Code
bool cal_next_permutation(vector<int> &nums)
{
int i;
int sz = (int) nums.size();
for (i = sz - 2; i >= 0 && nums[i] >= nums[i + 1]; --i) {
;
}
if (i < 0) {
return false;
}
int j;
for (j = sz - 1; j > i && nums[j] <= nums[i]; --j) {
;
}
swap(nums[i], nums[j]);
reverse(nums.begin() + i + 1, nums.end());
return true;
}
vector<vector<int>> permute(vector<int> &nums)
{
vector<vector<int>> res;
sort(nums.begin(), nums.end());
res.push_back(nums);
while (cal_next_permutation(nums)) {
res.push_back(nums);
}
return res;
}