字符串的排列(剑指offer)

字符串的排列

题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
示例1
输入
“ab”
返回值
[“ab”,“ba”]

解题思路:

  1. 先对输入的字符串进行排序【要求按字典顺序打印】。
  2. 对排好序的数组:先固定其中一个元素,然后对剩下的元素进行排列。

    如:"abc"
    先固定"a",对"bc"进行排序。同理固定"b",对"ac"排序。【递归条件】
    当数组只含有一个元素时,返回该值。【基线条件】


    对"abc"

    【1】➜ 固定"a",对"bc"

    【1.1】➜ 固定"b",对"c"。
    【1.1.1】➜ 只有一个元素"c",返回该值。
    ➜【1.1】 得到排序"bc",用数组存放起来。
    【1.2】➜ 固定"c",对"b"。

    【1.2.1】➜ 只有一个元素"b",返回该值。
    ➜【1.2】 得到排序"cb",用数组存放起来。运行完毕,返回数组[“bc”,“cb”]。
    ➜【1】 得到排序"abc",“acb”,用数组存放起来。
    ➜【2】固定"b",对"ac"

代码

class Solution:
    def Permutation(self, ss):
        if len(ss) < 2:
            return [ss]
        #先对字符串进行排序操作
        def quicksort(array):
            if len(array)<2:
                return array
            zuo = []
            you = []
            value = array[0]
            for i in range(1,len(array)):
                if array[i] < value:
                    zuo.append(array[i])
                else:
                    you.append(array[i])
            return quicksort(zuo) + [value] + quicksort(you)
        shunxu = quicksort(ss)
        #然后从左到右开始固定一个字符,对其他字符进行排列组合,再将结果合并在一起
        def solution(array):
            if len(array)<2:
                return array[0]  
            save_list = []
            for i in range(len(array)):
                first_list = array[i]                
                for new_array in solution(array[:i]+array[i+1:]):
                    tmp = first_list + new_array
                    if tmp not in save_list:
                        save_list.append(tmp)
            return save_list
        return solution(shunxu)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值