【发布时间】:2020-04-13 06:02:45
【问题描述】:
我创建了一个名为 permutations_dist(s, dist) 的递归函数。
它应该返回一个字符串的排列数,而排列中每2个字母之间的距离不超过给定的数字。
几个例子:
permutations_dist("abc", 1) --> 2
permutations_dist("abc", 1000) --> 6
permutations_dist("abcz", 23) --> 4
如何使以下代码更高效? 我想使用回溯。
它很快就达到了最大递归深度。例如 - permutations_dist("abcdefghijkm", 3))。
代码:
def permutations_dist(s, dist):
return len(permutations_dist_helper(s, dist))
def permutations_dist_helper(s, dist):
if len(s) == 1:
return [s]
perm_list = [] # resulting list
for a in s:
remaining_elements = [x for x in s if x != a]
z = permutations_dist_helper(remaining_elements, dist)
for t in z:
if abs(ord(a) - ord(t[0])) <= dist:
perm_list.append([a] + t)
return perm_list
【问题讨论】:
标签: python python-3.x recursion permutation