Vì vậy, tôi đang cố gắng viết hàm python có hai đối số, n và num, và đếm số lần xuất hiện của 'n' giữa 0 và num. Ví dụ,Số lần xuất hiện của chữ số 'x' trong phạm vi (0, n]
countOccurrences(15,5)
nên 2
countOccurrences(100,5)
nên 20
tôi đã thực hiện một giải pháp lặp đi lặp lại đơn giản cho vấn đề này:..
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
Điều này gặp phải các vấn đề rõ ràng nếu tôi cố gắng gọi countOccurrences(100000000000,5)
. Câu hỏi của tôi là làm thế nào tôi có thể làm cho điều này hiệu quả hơn? Tôi muốn có thể xử lý vấn đề "khá" nhanh chóng, và tránh các lỗi bộ nhớ. Đây là đèo đầu tiên của tôi tại một giải pháp đệ quy cố gắng thực hiện điều này:
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
Nếu đây là Python 2.x, hãy sử dụng 'xrange'. Recursion chỉ có nghĩa là bạn đã đạt đến giới hạn đệ quy hệ thống. – jonrsharpe
Tôi tin rằng giải pháp thích hợp có lẽ là thông minh hơn nhiều so với điều này. Tôi tưởng tượng điều này có thể được thực hiện trong O (log n) nếu không O (1). – Kevin
Tôi đồng ý với Kevin khác. Tôi nhớ lại nhìn thấy câu hỏi này trên một trang web thách thức lập trình (Project Euler ???), và giải pháp là đệ quy và logarit. – Kevin