题目大意:求出一个序列的全排列
题目分析:全排列问题都可以用递归的方式来解决,将第一个数分别与后面的每一个数交换,然后对后面的数进行全排列。
全排列问题的模板如下:
#include <iostream>
using namespace std;
void Perm(char s[], int m,int n){
if(m==n){
for(int i=0;i<=m;i++){
cout<<s[i];
}
cout<<endl;
}
else{
for(int i=m;i<=n;i++){
swap(s[m],s[i]);
Perm(s,m+1,n);
swap(s[m],s[i]);
}
}
}
int main(){
char s[] = "abc";
Perm(s,0,2);
return 0;
}
下面用Python来实现一下这道题,要注意的是Python中交换两个数,可以不用临时变量,真的很方便。
class Solution(object):
def permute(self, nums):
numsLen = len(nums)
result = []
self.compute(result,nums,0,numsLen-1)
return result
def compute(self,result,nums,m,n):
if m==n:
temp = []
for i in range(0,m+1):
temp.append(nums[i])
result.append(temp)
else:
for i in range(m,n+1):
nums[i],nums[m] = nums[m],nums[i]
self.compute(result,nums,m+1,n)
nums[m],nums[i] = nums[i],nums[m]