Leetcode46. 全排列

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jaster_wisdom/article/details/80645353

题目大意:求出一个序列的全排列

题目分析:全排列问题都可以用递归的方式来解决,将第一个数分别与后面的每一个数交换,然后对后面的数进行全排列。

全排列问题的模板如下:

#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]

展开阅读全文

没有更多推荐了,返回首页