首页 > 学院 > 开发设计 > 正文

LintCode 15 全排列

2019-11-08 03:15:41
字体:
来源:转载
供稿:网友

题目:permute


要求:

给定一个数字列表,返回其所有可能的排列。 注意事项你可以假设没有重复数字。

样例:

给出一个列表[1,2,3],其全排列为:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]

算法要求:

使用递归和非递归分别解决。

解题思路:

只写出来递归的方法,思路就是m位与其他位依次交换,直到m等于总个数的时候(这个时候就是无法交换了)存入到vector容器里。m是从0~总个数的,而且m只跟m后面的进行交换,这样就不会出现重复交换了。注意当函数到了递归出口的时候,简单来说就是我存进去一个,就将它还原成上一个。非递归的方法想出来就会再来补充。

算法如下:

vector<vector<int> > mainVec; void permute(vector<int> &nums, int m) { int temp; if (m == nums.size()) { mainVec.push_back(nums); } else { for (int i = m; i < nums.size(); i++) { temp = nums[m]; nums[m] = nums[i]; nums[i] = temp; permute(nums, m+1); temp = nums[m]; nums[m] = nums[i]; nums[i] = temp; } } } vector<vector<int> > permute(vector<int> nums) { mainVec.clear(); permute(nums, 0); return mainVec; }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表