剣指Offer(二十七):文字列の配列

1490 ワード

剣指Offer(二十七):文字列の配列
微信の公衆番号を検索します:'AI-ming 3526'あるいは'コンピュータの視覚のこの小さい事'はもっと多くのアルゴリズムを獲得して、機械は乾物csdnを勉強します:https://blog.csdn.net/baidu_31657889/github:https://github.com/aimi-cn/AILearners
一、リード
このシリーズは私が牛客のネット上で《剣指Offer》のブラシのノートを磨いて、自分のアルゴリズムの能力を高めることを目的としています.完全な剣指Offerアルゴリズムの問題の解析を表示するにはCSDNとgithubリンクをクリックしてください:剣指Offer完全な練習問題の解析CSDNアドレスgithubアドレス
二、テーマ
文字列を入力し、その文字列のすべての配列を辞書順に印刷します.例えば文字列abcを入力すると、文字a,b,cで並べられるすべての文字列abc,acb,bac,bca,cab,cbaが印刷される.
説明を入力:
9を超えない文字列を入力します(文字が重複する可能性があります)、文字には大文字と小文字のみが含まれます.
1、考え方
再帰法、問題はまず最初の文字を固定することに変換して、残りの文字の配列を求めます;残りの文字の配列を求めるときは元の問題と同じです.
(1)最初の位置に現れる可能性のあるすべての文字を遍歴する(すなわち、最初の文字と後ろのすべての文字を順番に交換する).
(2)最初の文字を固定し、後の文字の配列を求める(すなわち、第1ステップの遍歴中に、挿入再帰を実現する).
2、プログラミング実現
python
コード実装方式:
# -*- coding:utf-8 -*-
class Solution:
    def Permutation(self, ss):
        # write code here
        if len(ss) <=1:
            return ss
        res = set()
        #       ,       ,        a,b,c...,      
        for i in range(len(ss)):
            #                             ,      (    )
            for j in self.Permutation(ss[:i] + ss[i+1:]):
                #          add(),      (       ,        , baa,baa)
                res.add(ss[i] + j)
        # sorted()           ,        list
        return sorted(res)

AIMI-CN AI学習交流群【1015286623】より多くのAI資料を取得
技術を分かち合い、生活を楽しむ:私たちの公衆番号のコンピュータの視覚という小さなことは毎週「AI」シリーズの情報類の文章を送って、あなたの関心を歓迎します!