笔试题59. LeetCode OJ (46)
来源:互联网 发布:网络武侠小说排行榜 编辑:程序博客网 时间:2024/06/17 07:43
做完了字符全排列后又来道数字全排列?没错,这道题是数字全排列,给你一个数组,数组里面的元素不同,问这些数字有多少种组合方式。这道题的题目比较直观,很容易理解,于是我们也就可以更容易的去思考解题方案了。
毫无悬念,这道题用递归解答比较容易吧?其思想是:分别将某一个数字当做一个独立单位;然后不断将剩下的数字当做单独的单位按次序加入进来;递归回来后与其后面的数字交换顺序然后重复操作;最后就可以得出全排列了。
这样的递归思想确实不好描述,大家看看代码吧,看了以后就比较清晰了:
class Solution {public:vector<vector<int>> permute(vector<int>& nums){vector<vector<int>> ret;ret.clear();if (nums.size() == 0){//return ret;}else if (nums.size() == 1){vector<int> tmp;tmp.push_back(nums[0]);ret.push_back(tmp);//return ret;}else{solves(ret, nums, 0);}return ret;}void solves(vector<vector<int>>& ret, vector<int>nums, int index){if (index > nums.size()){return;}else if (index + 1 == nums.size() || index == nums.size()){vector<int> tmp;for (int i = 0; i < nums.size(); ++i){tmp.push_back(nums[i]);}ret.push_back(tmp);return;}//从 index 位置开始,依次交换位置(位置相同的不用交换)并递归int begin = index;for (int i = index; i < nums.size(); ++i){if (i != begin){swap(nums[begin], nums[i]);}solves(ret, nums, index + 1);}}};最后结果如下(为了说明程序的正确性):
0 0
- 笔试题59. LeetCode OJ (46)
- 笔试题14. LeetCode OJ (1)
- 笔试题15. LeetCode OJ (2)
- 笔试题16. LeetCode OJ (3)
- 笔试题17. LeetCode OJ (4)
- 笔试题18. LeetCode OJ (7)
- 笔试题19. LeetCode OJ (5)
- 笔试题20. LeetCode OJ (6)
- 笔试题21 . LeetCode OJ (8)
- 笔试题22. LeetCode OJ (9)
- 笔试题23. LeetCode OJ (10)
- 笔试题24. LeetCode OJ (11)
- 笔试题25. LeetCode OJ (12)
- 笔试题26. LeetCode OJ (13)
- 笔试题27. LeetCode OJ (14)
- 笔试题28. LeetCode OJ (15)
- 笔试题29. LeetCode OJ (16)
- 笔试题30. LeetCode OJ (17)
- IE8中往数组放值的问题
- 狼主小磊
- Java 多线程CountDownLatch、CyclicBarrier、Thread.join方法基本用法
- 无限循环小数化分数
- Android Studio ndk的开发(我的第一个ndk程序)
- 笔试题59. LeetCode OJ (46)
- IT选择
- JVM GC调优
- 借助Maven为项目划分development,test,production环境
- 解决sql2005远程连接报错,提示请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接
- 如何利用github搭建一个个人网站
- MVC里ActionResult或ViewResult跳转到当前控制器下对应的视图里的做法
- Runtime(二)成员变量与属性
- 关于 mysql 游标的初次体验