第二题你这个代码如果在自己电脑上,会递归深度超出,所以我把数据范围缩小到1-100了,后面附上测试代码和结果: import time import random import math from collections import defaultdict def solution(n,input): result = 0 dp_dict = defaultdict(int) dp_dict[1] = 0 input_max = max(input) for number in range(2,input_max): if number not in dp_dict: dp_dict[number] = dp_dict[number-1] + 1 if number + 1 in dp_dict: dp_dict[number+1] = min(dp_dict[number+1],dp_dict[number]+1) else: dp_dict[number+1] = dp_dict[number] + 1 for second in range(2,min(number+1,int(math.sqrt(input_max))+1)): if number * second > input_max: break if number * second in dp_dict: dp_dict[number*second] = min(dp_dict[number*second], dp_dict[number]+dp_dict[second]+1) else: dp_dict[number*second] = dp_dict[number]+dp_dict[second]+1 for number in input: result += dp_dict[number] return result
点赞 6

相关推荐

wuwuwuoow:Redisson 写错了,记得 Redis 儿子以后都不会写错。其他没啥问题,海投就行。
点赞 评论 收藏
分享
牛客网
牛客企业服务