python字符串的排列代码实例讲解
程序员文章站
2022-06-17 10:14:22
字符串的排列
题目:输入一个字符串,打印出字符串的所有排列
基本思路:这个问题就是一个排列组合问题,使用python生成器可以很好的解决这个问题,将字符串进行迭代,每次迭代将一...
字符串的排列
题目:输入一个字符串,打印出字符串的所有排列
基本思路:这个问题就是一个排列组合问题,使用python生成器可以很好的解决这个问题,将字符串进行迭代,每次迭代将一个字符加入到新的字符串当中,并且将这个字符的序列记录到元组state中,这个元组可以用来判断之前是否添加过某个字符!
拓展:八皇后问题也是这样的原理!
# 献上代码 # _*_ encoding:utf-8 _*_ class Solution: def string_arrange(self, string): if not string: return # 用一个集合set来保存返回的字符串 string_set = set() for arrange_list in self.arrangement(string): string_set.add(arrange_list) return list(string_set) def arrangement(self, string, state=()): """ 字符串生成器 通过用state来记录当前的字符串已经使用了哪些位置(index)的字符串 """ for index, char in enumerate(string): if not self.conflict(index, state): if len(state) == len(string) - 1: yield char for result in self.arrangement(string, state + (index,)): yield char + result def conflict(self, index, state): """ 判断当前字符串序列index是否存在于state的当中 如果存在:矛盾,返回True 否则,返回False """ if not state: return False if index in state: return True return False if __name__ == '__main__': # 测试用例 solution = Solution() string_list = ['', 'a', 'abc', 'abcda', None] for string in string_list: string_arrange = solution.string_arrange(string) if string_arrange: print len(string_arrange), print string_arrange
上一篇: 一种离谱到极致的页面侧边栏效果探究