问题描述
小U手中有两个数字 a 和 b。第一个数字是一个任意的正整数,而第二个数字是一个非负整数。她的任务是将第二个数字 b 插入到第一个数字 a 的某个位置,以形成一个最大的可能数字。
你需要帮助小U找到这个插入位置,输出插入后的最大结果。
测试样例
样例1:
输入:
a = 76543, b = 4
输出:765443
样例2:
输入:
a = 1, b = 0
输出:10
样例3:
输入:
a = 44, b = 5
输出:544
样例4:
输入:
a = 666, b = 6
输出:6666
这道题目的核心在于找到最佳的插入位置,使得插入数字 b 后形成的新数字最大。
解题思路:
-
字符串转换: 为了方便插入操作,将输入的整数
a和b转换为字符串a_str和b_str。 -
初始化最大值: 假设将
b插入到a的最前面,得到一个初始的最大值num_max。 -
遍历插入位置: 遍历
a_str的所有可能插入位置 (包括开头和结尾)。- 在每个位置
i,将b_str插入到a_str[:i]和a_str[i:]之间,得到一个新的字符串current_num。 - 比较
current_num和num_max的大小,如果current_num更大,则更新num_max。
- 在每个位置
-
返回结果: 遍历结束后,将
num_max转换回整数类型并返回。
def solution(a: int, b: int) -> int:
a_str = str(a)
b_str = str(b)
# 初始化最大值为插入到最前面的情况
num_max = b_str + a_str
# 遍历插入位置
for i in range(len(a_str) + 1):
current_num = a_str[:i] + b_str + a_str[i:]
if current_num > num_max:
num_max = current_num
return int(num_max)
if __name__ == '__main__':
print(solution(76543, 4) == 765443)
print(solution(1, 0) == 10)
print(solution(44, 5) == 544)
print(solution(666, 6) == 6666)
代码分析:
- 时间复杂度为 O(n),其中 n 是
a的位数。 - 使用了字符串切片
a_str[:i]和a_str[i:]来实现字符串的拼接。