【发布时间】:2015-09-16 04:00:51
【问题描述】:
所以我正在尝试编写一个 python 函数,它接受两个参数 n 和 num,并计算 0 和 num 之间出现的“n”。例如,
countOccurrences(15,5) 应该是2。
countOccurrences(100,5) 应该是20。
我对这个问题做了一个简单的迭代解决方案:
def countOccurrences(num,n):
count=0
for x in range(0,num+1):
count += countHelper(str(x),n)
return count
def countHelper(number,n):
count=0
for digit in number:
if digit==n:
count += 1
return count
如果我尝试调用countOccurrences(100000000000,5),这会遇到明显的问题。
我的问题是如何提高效率?我希望能够“相当”快速地处理问题,并避免内存不足错误。这是我第一次尝试这样做的递归解决方案:
def countOccurence(num, n):
if num[0]==n:
return 1
else:
if len(num) > 1:
return countOccurence(num[1:],n) + countOccurence(str((int(num)-1)),n)
else:
return 0
【问题讨论】:
-
如果这是 Python 2.x,请使用
xrange。递归只是意味着你达到了系统递归限制。 -
我相信正确的解决方案可能比这更聪明。我想如果不是 O(1),这可以在 O(log n) 中完成。
-
我同意其他凯文的观点。我记得在编程挑战网站(Project Euler???)上看到这个问题,解决方案是递归和对数。
-
您可以使用与此非常相似的解决方案来获得 O(log n):stackoverflow.com/questions/22394257/…
标签: python algorithm memory-management