cat*_*n87 6 python algorithm memory-management
所以我正在尝试编写一个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
Run Code Online (Sandbox Code Playgroud)
如果我试图打电话,这会遇到明显的问题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
Run Code Online (Sandbox Code Playgroud)
我已经修复了我的解决方案,希望它符合您的规格。让我们看一下第一个辅助函数:
def splitNumber(num):
temp = str(number)
nums = list(temp)
return nums
Run Code Online (Sandbox Code Playgroud)
此函数创建数字输入中所有单独数字的字符串列表。例如,
splitNumber(100)
Run Code Online (Sandbox Code Playgroud)
会返回:
['1', '0', '0']
Run Code Online (Sandbox Code Playgroud)
从这里,您调用主函数并使用此主函数测试每个单独的数字:
def countOccurences(num, n):
count = 0
for x in range(0, (num + 1)):
temp = splitNumber(x)
for x in range(len(temp)):
if (temp[x] == str(n)):
count = count + 1
return count
Run Code Online (Sandbox Code Playgroud)
这应该给出所需的输出。让我知道这是否适合您!
| 归档时间: |
|
| 查看次数: |
1584 次 |
| 最近记录: |