我刚刚编写了下面的算法,通过插入任何特定的数字来获得最大可能的数字
getLargestPossible
接收两个参数,其目的是通过将numInsertion
插入num
中的任何位置来查找最大可能数。例如:
getLargestPossible(623, 5)
和getLargestPossible(-482, 5)
分别返回6523和-4582
如何以最有效的方式编写此算法
def attachRest(list_int, str_num, index):
'''
Converts list_int to list of strings, merges it with str_num
(splitted from index) and returns the result as an integer
'''
s = [str(i) for i in list_int]
str_num = str_num[index:]
s = s + list(str_num)
num = int("".join(s))
return num
def getLargestPossible(num, numInsertion):
'''
Returns a largest possible number by inserting numInsertion into num
e.g.: getLargestPossible(623, 5) returns 6523
getLargestPossible(-482, 5) returns -4582
'''
new_num = []
isNumberInserted = False
if num > 0:
str_num = str(num)
for index, digit in enumerate(str_num):
if numInsertion > int(digit):
new_num.append(numInsertion)
num = attachRest(new_num, str_num, index)
isNumberInserted = True
break
else:
new_num.append(int(digit))
if isNumberInserted is False: #e.g. if num==666 and numInsertion==5, return 6665
num = num * 10 + numInsertion
print(num)
else:
str_num = str(-1 * num)
for index, digit in enumerate(str_num):
if numInsertion < int(digit):
new_num.append(numInsertion)
num = attachRest(new_num, str_num, index)
isNumberInserted = True
break
else:
new_num.append(int(digit))
if isNumberInserted is False:
num = num*10 - numInsertion
print(num)
else:
print(-1 * num)
难道你不能简化成这样:
好的,让我们让它更快
通过简单的检查,我相信如果数字为负数,插入将始终是以下之一:
f(-524242, 8): -5242428)
;或f(-3251342,2): -23251342
或f(-1251342,2): -12251342
对于正数:
f(345342,2): 3453422)
;或f(3251342,2): 32521342
您可以修改我的函数,以便它可以一次找到插入点,方法是:
现在,让我们以以下内容为基准:
该基准打印:
所以,同样的方法,但检查与蛮力使其速度提高了2到3倍
相关问题 更多 >
编程相关推荐