JZ27 字串的排列

2021-10-25 10:21:43 字數 1702 閱讀 2478

【題目描述】

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則按字典序列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。

輸入描述:

輸入乙個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。

示例1輸入

輸出「ab」

[「ab」,「ba」]

【字典序】

字典序(dictionary order),又稱字母序(alphabetical order),原意是表示英文單詞在字典中的先後順序,在計算機領域中擴充套件成兩個任意字串的大小關係。

下列單詞就是按照字典序進行排列的:

as aster astrolabe astronomy astrophysics at ataman attack baa

【官方**】

// for迴圈和swap的含義:對於「abc」,

// 第一次'a' 與 'a'交換,字串為"abc", pos為0, 相當於固定'a'

// 第二次'a' 與 'b'交換,字串為"bac", pos為0, 相當於固定'b'

// 第三次'a' 與 'c'交換,字串為"cba", pos為0, 相當於固定'c'

for(

int i = pos; i < s.

length()

;++i)

} vector

permutation

(string s)

; set ret;

perm(0

, s, ret)

;return vector()

;}};

【b站**】

class

solution

void

dfs(string &str,

int idx,

int start,

int state)

//單個排列沒有排完

//相同字母而言 前後關係

//可能重複排序

//通過控制相對順序不變確保不重複

if(idx ==

0|| str[idx]

!= str[idx -1]

) start =0;

//順序往後

for(

int i = start; i < str.

size()

; i ++)if

(!(state >> i &1)

)}};

//注意左移右移 和 操作符&

/(ㄒoㄒ)/~~感覺這題不簡單呀

JZ27 字串的排列

知識點 遞迴 全排列 題目鏈結 題目描述 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則按字典序列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。示例1 輸入 ab...

JZ27 劍指offer 字串的排列

題目描述 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則按字典序列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。class solution def permutation self,s str list str c,res l...

27 字串的排列

題目 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。思路 全排列,採用遞迴。1 首先,我們固定第乙個字元a,求後面兩個字元bc的排列 2 當兩個字元bc排列求好之後,我們把第乙個字...