因此,我試圖編寫一個接受兩個參數n和num的python函數,並計算0和num之間出現的'n'。例如,計算數字'x'在範圍(0,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'。遞歸只是意味着你達到了系統遞歸限制。 – jonrsharpe
我相信適當的解決方案可能比這更聰明。我想如果不是O(1),這可以在O(log n)中完成。 – Kevin
我同意其他凱文。我記得在一個編程挑戰網站(Project Euler ???)上看到這個問題,該解決方案是遞歸和對數的。 – Kevin