分段错误,需要防止这种情况并减少程序的运行时间

时间:2015-07-08 01:21:17

标签: python algorithm segmentation-fault runtime

我解决了一个问题,我必须找到数字之和,其数字仅由4,5和6组成。数字最多为x四,最多为五,最多为六。我成功通过了一些样本测试。但是,由于我不断遇到段错误,我无法通过其他测试用例。另外,我认为我的程序运行时间非常长。任何帮助减少运行时间,优化解决方案和防止段错误都将受到赞赏。 这是我在Python中的代码:

from itertools import permutations
x , y, z = raw_input().split(' ')
x = int(x)
y = int(y)
z = int(z)
max = ''
for a in range(z):
    max += '6'
for b in range(y):
    max += '5'
for c in range(x):
    max += '4'
perms = [''.join(p) for p in permutations(max)]
chances = []
def substring(string):
    possible = []
    for x in range(len(string) + 1):
        for y in range(x, len(string) + 1):
            possible.append(string[x:y])
    return possible
for d in perms:
    chances += list(set(substring(d)))
chances = list(set(chances))
chances.remove('')
sum = 0
for nstr in chances:
    sum += int(nstr)
print sum 

1 个答案:

答案 0 :(得分:0)

了解该计划的哪个部分消耗最多时间会很有帮助。看看下半部分,在调用排列之后,我看到你正在创建可能很大的列表(在chancespermutations中。在构建它们之后你转换为一个集合(以消除我认为的重复)然后再回到列表。为什么不使用单个集合,如下所示:

chances = set()
def substring(string):
    for x in range(len(string) + 1):
        for y in range(x, len(string) + 1):
            chances.add(string[x:y])
for d in perms:
    substring(d)
chances.remove('')
sum = 0
for nstr in chances:
    sum += int(nstr)
print sum 

我不知道这是否会解决你所有的问题,但它应该有所帮助。