Permutations
2015-06-14 09:36
323 查看
Description:
Given a collection of numbers, return all possible permutations.
For example,
思路分析:
求一组数据a1,a2,..., an的全排列可按如下步骤求解:
1.求出a2,a3,...an的全排列{P1,P2, ... ,Pj};
2. 将a1插入进去,得到新的全排列{a1P1, a1P2,..., a1Pj};
3. 交换a1和ai(1<i<=n),重复执行上述1,2两步,再交换a1和ai,即可得到所有的排列组合。
Code:
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].
思路分析:
求一组数据a1,a2,..., an的全排列可按如下步骤求解:
1.求出a2,a3,...an的全排列{P1,P2, ... ,Pj};
2. 将a1插入进去,得到新的全排列{a1P1, a1P2,..., a1Pj};
3. 交换a1和ai(1<i<=n),重复执行上述1,2两步,再交换a1和ai,即可得到所有的排列组合。
Code:
//定义一个接口函数 vector<vector<int>> permute(vector<int>& nums) { return permute(nums, 0, nums.size()-1); }
vector<vector<int>> permute(vector<int>& nums,int lIndex, int rIndex) { if (lIndex <= rIndex) { vector< vector<int> >result, tempResult; vector<int>temp; if (lIndex == rIndex) { temp.push_back(nums[lIndex]); result.push_back(temp); return result; } else { for (int i = lIndex; i <= rIndex; ++i) { if (i != lIndex) {//注意当i和lIndex相等时,一个数将和它本身异或,则结果一定为0 nums[i]^=nums[lIndex]; nums[lIndex]^=nums[i]; nums[i]^=nums[lIndex]; } tempResult = permute(nums, lIndex+1, rIndex); for (int j = 0; j < tempResult.size(); ++j) { tempResult[j].insert(tempResult[j].begin(),nums[lIndex]); result.push_back(tempResult[j]); } //将两个元素交换回来 if (i != lIndex) { nums[i]^=nums[lIndex]; nums[lIndex]^=nums[i]; nums[i]^=nums[lIndex]; } } return result; } } }
相关文章推荐
- 高效Linux用户需要了解的命令
- 4. 存储过程 · sql编程
- 总有一项适合你:联想 Miix2 8寸版触摸屏失灵的各项解决方案
- ObjectOutStream的reset方法
- POJ-3617 Best Cow Line(贪心法)
- 菜鸟学Andoid笔记(三十):Response实现重定向和注意事项
- hdu(1754)——I hate it(更新节点,区间最值)
- Xshell远程连接Ubuntu
- 3. mysql数据类型
- MySql 插入 读取数据正常,工具看到乱码。
- 学习杂记linux
- CentOS7 Apache+Mysql+PHP+Memcached安装
- 化抽象为具体学动态规划
- 用例建模(设计)
- 2.1. sql增删查改
- UV镜还是保护镜?差异很大啊!(附14款镜片测试结果)
- bash array
- Java中getMessage()和printStackTrace方法
- MyBatis数据持久化(一)准备工作
- MyBatis数据持久化(一)准备工作