# -*- coding:utf-8 -*- import copy def cmp(x, y): if x > y: return -1 else: return 0 class Solution: def Permutation(self, ss): if ss is None: return [] if len(ss) == 0: return [] listss = list(ss) listss.sort() myList = [] myList.append(ss) self.PermutationHelper(listss, myList) return myList def PermutationHelper2(self, ss): if ss is None: return [] if len(ss) == 0: return [] mylist = [] mylist.append(ss) size = len(ss) while True: p = len(ss) - 1 while p >= 1 and ss[p - 1] >= ss[p]: p -= 1 if p == 0: break q = p p -= 1 while q < size and ss[q] > ss[p]: q += 1 q -= 1 ss = list(ss) t = ss[p] ss[p] = ss[q] ss[q] = t tempss = ss[p + 1:] tempss = tempss[::-1] ss = ss[0:p + 1] + tempss ss = "".join(ss) mylist.append(ss) return mylist def PermutationHelper(self, ss, Mylist): size = len(ss) for i in range(size - 2, -1, -1): if ss[i] < ss[i + 1]: flag = 1 for j in range(size - 1, i, -1): if ss[j] > ss[i]: t = ss[i] ss[i] = ss[j] ss[j] = t tempss = ss[i + 1:] tempss = tempss[::-1] ss = ss[0:i + 1] + tempss flag = 0 break if flag == 0: Mylist.append("".join(copy.copy(ss))) self.PermutationHelper(ss, Mylist) def reversedemo(ss): return reversed(ss) def demo(): ss = "122" ss = list(ss) mylist = [] mylist.append(copy.copy(ss)) s = Solution() s.PermutationHelper(ss, mylist) for items in mylist: print items # demo() ss = '122' s = Solution() res = s.PermutationHelper2(ss) for itemRes in res: print itemRes