当前位置: 首页 > article >正文

Leetcode字符串的排列

在这里插入图片描述

其实可以看成使用其中一个字符加上其他字符的连接,最后用set去重

class Solution:
    @lru_cache(None)
    def permutation(self, s: str) -> List[str]:
        if not s: return ['']
        res = set()
        for i in range(len(s)):
            for j in self.permutation(s[:i]+s[i+1:]):
                res.add(s[i]+j)
        return list(res)

题解链接:https://leetcode.cn/problems/zi-fu-chuan-de-pai-lie-lcof/solution/by-ke-ke-tub-llpt/

其他解法:
相当于每次固定前x位,交换之后的字符串,直到达到长度要求,也是需要通过判断去重

class Solution:
    def permutation(self, s: str) -> List[str]:
        c, res = list(s), []
        def dfs(x):
            if x == len(c) - 1:
                res.append(''.join(c))   # 添加排列方案
                return
            dic = set()
            for i in range(x, len(c)):
                if c[i] in dic: continue # 重复,因此剪枝
                dic.add(c[i])
                c[i], c[x] = c[x], c[i]  # 交换,将 c[i] 固定在第 x 位
                dfs(x + 1)               # 开启固定第 x + 1 位字符
                c[i], c[x] = c[x], c[i]  # 恢复交换
        dfs(0)
        return res

链接:https://leetcode.cn/problems/zi-fu-chuan-de-pai-lie-lcof/solution/mian-shi-ti-38-zi-fu-chuan-de-pai-lie-hui-su-fa-by/


http://www.kler.cn/a/7947.html

相关文章:

  • MySQL【三】
  • 写给初学者的React Native 全栈开发实战班
  • 高防服务器的费用受到哪些原因影响?
  • 云运维基础
  • Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解
  • change buffer:到底应该选择普通索引还是唯一索引
  • Unity Animation -- 改进动画效果
  • Leetcode.559 N 叉树的最大深度
  • Debezium报错处理系列之五十七:Can‘t compare binlog filenames with different base names
  • C++从0到1实战
  • Vector - CAPL - CRC算法介绍(续)
  • Android 中封装优雅的 MediaPlayer 音频播放器,支持多个播放器
  • Ansys Zemax | 如何使用 Zernike 凹陷表面对全反射系统进行建模
  • html中开源的视频播放器插件有哪些以及官方网站和详细介绍说明
  • linux 共享内存 shmget
  • Day924.自动化测试 -系统重构实战
  • 【Linux】进程理解与学习-程序替换
  • 小白的git入门教程(二)
  • FreeRTOS学习(一)
  • 【分享】太阳能电池性能测试指标,太阳能电池IV测试软件系统
  • JAVAWeb01-BS架构简述、HTML
  • 人脸识别:使用Python和机器学习技术实现
  • 学校的地下网站(学校的地下网站1080P高清)
  • 关于json和xml的知识点总结
  • ROS实践12 自定义源文件并调用
  • Serverless MQTT 服务即将正式上线、新增 2 个平台安装包