问题描述
小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 的某个位置,以形成一个最大的可能数字。
数据结构选择
- 字符串:由于我们需要在数字的不同位置插入另一个数字,字符串操作是最合适的选择。字符串可以方便地进行切片和拼接操作。
算法步骤
- 转换为字符串:将数字
a和b转换为字符串。 - 遍历所有可能的插入位置:遍历字符串
a的所有可能插入位置。 - 生成候选字符串:在每个位置插入字符串
b,生成新的候选字符串。 - 比较并更新最大值:比较候选字符串与当前最大值,更新最大值。
- 返回结果:将最终的最大字符串转换为数字并返回。
def solution(a, b):
# 将数字转换为字符串
str_a = str(a)
str_b = str(b)
max_str = ''
# 遍历所有可能的插入位置
for i in range(len(str_a) + 1):
# 生成新的候选字符串
prefix = str_a[:i]
suffix = str_a[i:]
candidate = prefix + str_b + suffix
# 比较并更新最大值
if candidate > max_str:
max_str = candidate
# 将最终结果转换为数字并返回
return int(max_str)
def main():
print(solution(76543, 4) == 765443)
print(solution(1, 0) == 10)
print(solution(44, 5) == 544)
print(solution(666, 6) == 6666)
if __name__ == "__main__":
main()
解释
- 字符串转换:使用
str()函数将数字a和b转换为字符串。 - 遍历插入位置:使用
range(len(str_a) + 1)遍历字符串str_a的所有可能插入位置。 - 生成候选字符串:使用切片操作生成新的候选字符串。
- 比较和更新最大值:比较候选字符串与当前最大值,更新最大值。
- 返回结果:将最终的最大字符串转换为数字并返回。