42 - Permutations
来源:互联网 发布:分类决策树算法 编辑:程序博客网 时间:2024/04/30 00:14
Given a collection of 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]
.
solution: 递归方法实现,从第0位开始,先交换当前位和后续1 到最后中的每个数,然后递归之。
class Solution {public: void swap(vector<int> &num, int i, int j) { int temp = num[i]; num[i] = num[j]; num[j] = temp; } void per(vector< vector<int> >&res, vector<int> &num, int cur, int len) { if(cur == len) { res.push_back(num); return; } for(int i = 0; i < len - cur; i++) { swap(num, cur, cur+i); per(res, num, cur+1, len); swap(num, cur, cur+i); } } vector<vector<int> > permute(vector<int> &num) { // Note: The Solution object is instantiated only once and is reused by each test case. vector< vector<int> >res; vector<int> result; if(num.size() <= 0) return res; int len = num.size(); per(res, num, 0, len); return res; }};
在论坛上找到这样的代码,原理是相同的,由于引入了bool值的数组来标识已访问的数字,这样不需要改变原来数组,可靠性更强些,但由于每次递归都会做一次n的循环,所以效率会低。但该方法在实现permutations II 的时候显得很好用,所以sign下。
class Solution {public:vector<vector<int> > permute(vector<int> &num) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<vector<int> > ans; if(num.size<()=0) return ans; vector<int> s; vector<bool> used(num.size(), false); permuteRec(num, s, used, ans); return ans;}void permuteRec(vector<int> &num, vector<int> &s, vector<bool> &used, vector<vector<int> > &ans){ if(s.size()==num.size()) { ans.push_back(s); return; } for(int i=0; i<used.size(); i++) { if(!used[i]) { s.push_back(num[i]); used[i]=true; permuteRec(num, s, used, ans); used[i]=false; s.pop_back(); } }}};
- 42 - Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- 在浏览器地址栏输入url后,发生的事情
- rqnoj-116-质数取石子
- 数字游戏
- firefox 学习备忘
- 数据类型
- 42 - Permutations
- 使用 PHP 直接在共享内存中存储数据集
- 43 - Permutations II
- GL_TEXTURE_WRAP系列参数的取值
- Windows Phone 7使用HTTP Basic认证连接gsoap编写的WebService
- [Windows]Apache虚拟主机多网站配置教程 127.0.0.2 127.0.0.3 ....
- 一步一步教你写SAP RFC (实战项目)OA通过读取采购订单号获取物料号最近5次变价记录
- 发布管理软件
- extjs 分页 分页工具分页和缓存分页的简单使用 buffered、pagingtool