leetcode 字符串的排列(循环以及递归)

一、题目描述

在这里插入图片描述

二、思路以及代码

递归思路:

分解字符串,将其视为第一个字符和其余字符的组合,利用这个函数反复得到
首字母+其余字符串的全排列,直到其余字符串长度为1返回。
最终利用list(set(lst))对lst去重。
理解简单,书写便捷,缺点是耗时较久。

class Solution:
    #递归
    def permutation(self, s: str):
        if len(s)==1:
            return [s]
        lst=[]
        for index in range(len(s)):
            rets=self.permutation(s[:index]+s[index+1:])
            for ret in rets:
                lst.append(s[index]+ret)
        return list(set(lst))

循环思路

参考了“he___jia”的题解,笔者手写代码。
主要思路是:
从一个字符开始,每轮循环增加一个字符,
在之前字符全排列的基础上逐空插入下一个字符,最终得到多一个字符的全排列,循环下去,得到所有字符的全排列。

class Solution:
    #循环
    def permutation(self, s: str):
        rets=set(s[0])
        index,l=1,len(s)
        #循环开始
        while(index<len(s)):
            temp=set()
            for ret in rets:
                for j in range(len(ret)+1):
                    string=ret[:j]+s[index]+ret[j:]
                    temp.add(string)
            index+=1
            rets=temp
        return list(rets)

三、执行用时比较

笔者手写的递归740ms,循环76ms(原循环题解作者为40ms,膜拜)。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41584385/article/details/104687251
今日推荐