题目描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列 例如输入字符串abc, 则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。

i c } m l p a o s r s f } f } f } t u u u F n n n F o c c c o r l f v f } r v i } } u 2 p e u i a o e f a f n 8 e t l s r r t u r e d S r l S u l b l a o m t _ w r i i } r l t e l p s f } t l u e p a e f n _ e g e r e o i u t m e p s i p m i t i r o t a p r ( u n a r e p n n { n i t : m a l r r b e r : d t i i } o i [ u r t b r e r s m [ = a ( f n o C t r : e [ s e u u C = t " i n h a : B g i u a l t h a n i { ( a t o i ] l k t a a e : s t f t _ r i [ o n t t r n [ - b S e u e a o C l . = i a d C - e w m l m s c n h . = = o c h - g a p l p : t ( a = < n t - a \ i p . _ . e a r e a f ( e r ( n ( s p s S r r a t n r a a r 1 a d . a w e w t ] r c r d r l r ] c a . r a r a r : t u [ s r { t t < r p m p i = e e { e e : = e a e : A u A n t r n r ) n t t t g A e ] d [ a ] " d t ( a ( ) r m , ] C r ) e i t i r p h r = { m , i , { a , b { a p o y e r A , b n b ( b g a r e ( e s e i c r b g a g ) g n t a e i r i i : e y g n r n n r ( i ) : ) : I ] a n n , r : t 0 t r e , , b [ b m e 0 e p e e g . g , n n i . i d d n < n b : : : e , e n g t I I d e i e n n ] n n m t t ) d : p ) , : . b c e i e o n ) g u d i n B : { n t o + ) o I 1 l n , t { ) e n { d : e n d )

算法思想:首先,求所有可能出现在第一个位置的字符, 其次,把第一个字符和其后面的字符一一交换。如下图所示,分别把第一个字符a和后面的b、c等字符交换的情形。 接着,固定第一个字符,求后面所有字符的排列。这个时候我们仍把后面的所有字符分成两部分:后面字符的第一个字符,以及这个字符之后的所有字符。然后把第一个字符逐一和它后面的字符交换

github地址:https://github.com/cubegao/LeetCode