您的位置:首页 > 其它

Leetcode:Permutations 数组的全排列

2014-04-14 10:07 375 查看
Leetcode刷题刷到了Permutation,自己用递归写了一下数组全排列的算法,再深入理解一下递归的算法思想。

在遇到稍微复杂的问题之后要尝试从简单的问题入手,举几个小例子,找到规律,然后用程序语言描述出规律就OK了。

假如数组是[1,2,3],其全排列为[1,2,3],[1,3,2],[2,1,3],2,3,1],[3,2,1],[3,1,2].

全排列的过程如下:

1.首先将1固定,递归求子数组[2,3]的全排列;

2.将1和2交换,递归求[1,3]的全排列;

3.因为第二步中1和2进行了交换,因此需要再把1交换回来,交换回来之后再将1和3进行交换,再递归求[1,2]的全排列。

递归结束的条件是只剩下一个元素时,把整个排列好的数组存入一个二维数组中。

代码如下:

class Solution {
public:
void swap(int &a,int &b)
{
int temp = a;
a = b;
b = temp;
}
void permutation(vector<int> &num,int begin,int end,vector<vector<int> > &vec)
{
if(begin == end)
vec.push_back(num);
if(begin < end)
{
for(int i = begin;i <= end;i++)
{
swap(num[begin],num[i]);
permutation(num,begin + 1,end,vec);
swap(num[begin],num[i]);
}
}
}
vector<vector<int> > permute(vector<int> &num) {
int length = num.size();
vector<vector<int> > vec;
if(length == 0)return vec;
permutation(num,0,length - 1,vec);
return vec;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: