字符串的排列(字典序)
2017-01-25 03:32
190 查看
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
方法一:使用python的内置函数
# -*- coding:utf-8 -*- from itertools import * class Solution: def Permutation(self, ss): # write code here if ss == '': return [] # python字典序函数 lst = list(permutations(list(ss),len(ss))) # print lst for i in range(len(lst)): lst[i] = ''.join(lst[i]) # 使用set去重 l = list(set(lst)) # 返回排序的对象 return sorted(l) if __name__ == "__main__": a = Solution() print a.Permutation("abc")
方法二:DFS
错误代码,由于li1列表中删除元素的时候对li2也产生了相应的修改
# -*- coding:utf-8 -*- class Solution: def Permutation(self, ss): # write code here if ss == "": return [] x = len(ss) vis = [0 for i in range(x)] li1 = [] li2 = [] self.DFS(vis, ss, li1, li2, x) # print li2 for i in range(len(li2)): li2[i] = "".join(li2[i]) li2 = list(set(li2)) return sorted(li2) def DFS(self, vis, ss, li1, li2, x): if len(li1) == x: li2.append(li1) # print li2 return for i in range(x): if vis[i] == 0: vis[i] = 1 li1.append(ss[i]) self.DFS(vis, ss, li1, li2, x) vis[i] = 0 li1.pop() if __name__ == "__main__": a = Solution() print a.Permutation("abc")
正确代码(注意类中全局变量的使用)
# -*- coding:utf-8 -*- class Solution: global li2 li2 = [] def Permutation(self, ss): # write code here global li2 if ss == "": return [] x = len(ss) vis = [0 for i in range(x)] li1 = [] li2 = [] self.DFS(vis, ss, li1, x) # print li2 for i in range(len(li2)): li2[i] = "".join(li2[i]) li2 = list(set(li2)) return sorted(li2) def DFS(self, vis, ss, li1, x): global li2 if len(li1) == x: li = li1[::1] li2.append(li) # print li2 return for i in range(x): if vis[i] == 0: vis[i] = 1 li1.append(ss[i]) self.DFS(vis, ss, li1, x) vis[i] = 0 li1.pop() # print li2, "**" return li2
相关文章推荐
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
- 给定n个字符串,请对n个字符串按照字典序排列
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
- 字符串的全排列_字典序排列
- 算法练习 - 字符串的全排列(字典序排列)
- 给定n个字符串,请对n个字符串按照字典序排列。
- 《剑指Offer》面试题:按字典序打印出该字符串中字符的所有排列
- 《牛客网剑指offer27题》输入一个字符串,按字典序打印出该字符串中字符的所有排列
- python给定n个字符串,请对n个字符串按照字典序排列
- 给定固定长度的字符串,求解按字符字典序排列,该字符串是第几小?
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
- 字符串的排列--字典序生成、回溯
- 华为OJ---给定n个字符串,对n个字符串按照字典序排列
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
- 从字符串中提取数字,然后按长度和字典序排列
- 今天开始学Java 给定n个字符串,请对n个字符串按照字典序排列。
- n个字符串按照字典序排列
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。C++
- USTC机试—从键盘输入 N,建立 N*N矩阵,每个元素是一个字符串,为每个元素赋值。然后求 出按字典序排列最大的元素所在的行列。
- 剑指offer面试题28-字符串的排列