Permutations——LeetCode
2014-04-17 16:19
211 查看
Permutations
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]
根据题意,给你一系列整数(默认整数各不相同),求这些整数的所有排列结果。
加入输入为{1 ,2,3},那么输出为{1,2,3},{1,3,2},{2,1,3}{2,3,1},{3,1,2},{3,2,1}。
这是一道很好的考察递归的编程题。我们就以{1,2,3}讲解排列过程。首先我们固定第一个整数1,求后面两个整数23 的排列。当两个整数23的排列求好之后,我们把第一个整数1和后面的 2 交换,得到 213,接着我们固定第一个整数2,求后面两个整数13 的排列。最后把3放到第一位置,记住前面我们已经把原先的第一个整数1 和后面的2 做了交换,为了保证这次 3 仍然是和原先处在第一位置的 1 交换,我们在拿 3 和第一个整数交换之前,先要把2 和1 交换回来。在交换 2 和 1 之后,再拿 3 和处在第一位置的 1
进行交换,得到 321。我们再次固定第一个整数3求后面两个整数21 的排列。既然我们已经知道怎么求三个数的排列,那么固定第一个整数之后求后面两个整数的排列,就是典型的递归思路了。
#include "common.h" class Solution { public: void permute(vector<vector<int> > &re,vector<int> &num,int sindex){ int size=num.size(); if(sindex==size){ re.push_back(num); return; } else{ for(int i=sindex;i<size;i++){ int tmp=num[i]; num[i]=num[sindex]; num[sindex]=tmp; permute(re,num,sindex+1); tmp=num[i]; num[i]=num[sindex]; num[sindex]=tmp; } } } vector<vector<int> > permute(vector<int> &num) { vector<vector<int> > re; permute(re,num,0); return re; } }; int main(){ Solution so; vector<int> num; num.push_back(1); num.push_back(2); num.push_back(3); vector<vector<int> > re=so.permute(num); return 0; }注意:common.h中引入头文件vector等。
相关文章推荐
- leetcode -- Permutations II TODO
- leetcode 46: Permutations
- LeetCode 46. Permutations
- LeetCode Permutations
- LeetCode:Permutations
- LeetCode (18) Permutations I & II (排列一、二)
- leetcode 46. Permutations
- LeetCode 46 - Permutations
- 算法分析与设计课程(3):【leetcode】Permutations
- Permutations leetcode java
- LeetCode Permutations II
- [leetcode]Permutations @ Python
- 【leetcode】Permutations
- LeetCode:Permutations
- 【Leetcode】【python】Permutations
- 【Leetcode】Permutations
- leetcode 日经贴,Cpp code -Permutations
- [LeetCode] Permutations
- [leetcode 46] Permutations------数组中元素的所有排列组合集合
- leetcode 45: Permutations