Permutations [Leetcode 解题报告]
来源:互联网 发布:protgresql和mysql 编辑:程序博客网 时间:2024/06/06 21:04
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], and [3,2,1].
关于这个题方法很多,我在这里挑了两种常用的:
一、递归实现,每次从现有的串中选择一个,对其他的进行递归全排列,最后和在一起就是最终的结果,这种方法最容易理解,代码如下:
vector<vector<int>> permute(vector<int>& num) { int n=num.size(); vector<vector<int>> res; if(n==1){ res.push_back(num); return res; } else{ vector<int> copy; vector<int> temp; vector<vector<int>> post; for(int i=0;i<n;i++){ copy=num; copy.erase(copy.begin()+i); post=permute(copy); for(int j=0;j<post.size();j++){ temp=post[j]; temp.insert(temp.begin(),num[i]); res.push_back(temp); } } return res; } }
二、这种方法其实跟上面的很类似,但是稍快,可能是因为这种方法操作vector的次数少一些,主要思想是:递归进行n次,每次规定前K-1个元素,然后递归下面的n-k个元素,看代码更容易理解点,代码如下:
void perm(vector<vector<int>> &res,vector<int> &nums,int k){ if(k==nums.size()-1){ res.push_back(nums); return; }else{ perm(res,nums,k+1); for(int i=k+1;i<nums.size();i++){ swap(nums[k],nums[i]); perm(res,nums,k+1); swap(nums[k],nums[i]); } } } vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>> res; perm(res,nums,0); return res; } void swap(int &a,int &b){ int c=a; a=b; b=c; }
0 0
- [LeetCode]Permutations,解题报告
- 【LeetCode】Permutations 解题报告
- LeetCode-Permutations-解题报告
- [LeetCode] Permutations 解题报告
- Permutations [Leetcode 解题报告]
- 【LeetCode】Permutations II 解题报告
- [LeetCode] Permutations II 解题报告
- [leetcode] 46. Permutations 解题报告
- Permutations II [Leetcode 解题报告]
- LeetCode 46. Permutations 解题报告
- [Leetcode] 46. Permutations 解题报告
- [leetcode] 47. Permutations II 解题报告
- Leetcode # 46. Permutations 全排列 解题报告
- [Leetcode] 47. Permutations II 解题报告
- [leetcode]46. Permutations@Java解题报告
- [leetcode]47. Permutations II@Java解题报告
- Leetcode #47. Permutations II 全排列2 解题报告
- leetcode 之 Permutations 解题思路
- cocos2dx 事件处理机制
- 131. Palindrome Partitioning
- leetcode 242. Valid Anagram
- 对程序设计的一些感悟
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Permutations [Leetcode 解题报告]
- 动态规划——矩阵连乘的问题
- 4G(LTE)背后的技术和利益纠结——VoIP,VoLTE,SIP,IMS的前世今生
- 40. Combination Sum II
- iOS开发~UITableViewCell重用机制总结
- linux系统定位问题的常用命令
- Android App 缓存管理
- PL/SQL连接远程数据库
- dom4j的document遍历方法