题目链接:
https://leetcode.com/problems/permutations/description/
描述
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]
]
输出
样例输入
样例输出
算法思想:
思路一:依次挑出一个数,对剩下的排列,最后再把这个数插空,如_1_2_3可以在下划线的位置,递归下去即可
思路二:用非递归的思路,
源代码
方法一:
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> result;
int size = nums.size();
if (size == 1)
{
result.push_back(nums);
return result;
}
int back = nums[nums.size() - 1];
nums.pop_back();
vector<int> v(nums.begin(), nums.end());
vector<vector<int>> tem;
tem = permute(v);
for (int i = 0; i < tem.size(); i++)
{
for (int j = 0; j <= tem[0].size(); j++)
{
vector<int> ve(tem[i].begin(),tem[i].end());
ve.insert(ve.begin() + j, back);
result.push_back(ve);
}
}
return result;
}
};
方法二:
class Solution
{
public:
vector<vector<int>> permute(vector<int>& nums)
{
vector<vector<int>> res;
res.push_back(nums);
int n = nums.size();
if (n < 2)
return res;
int pos = 0;
while (pos < n - 1)
{
int size = res.size();
for (int i = 0; i < size; i++)
{
for (int j = pos + 1; j < n; j++)
{
vector<int> tmp = res[i];
swap(tmp[j], tmp[pos]);
res.push_back(tmp);
}
}
pos++;
}
return res;
}
};
最优源代码
http://www.cnblogs.com/grandyang/p/4358848.html