问题描述
小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
题目解析
问题描述
小U手中有两个数字 a 和 b。第一个数字 a 是一个任意的正整数,而第二个数字 b 是一个非负整数。她的任务是将第二个数字 b 插入到第一个数字 a 的某个位置,以形成一个最大的可能数字。你需要帮助小U找到这个插入位置,输出插入后的最大结果。
测试样例
-
输入:
a = 76543,b = 4输出:765443解释:将4插入到76543的最后一位,形成765443。 -
输入:
a = 1,b = 0输出:10解释:将0插入到1的最后一位,形成10。 -
输入:
a = 44,b = 5输出:544解释:将5插入到44的第一位,形成544。 -
输入:
a = 666,b = 6输出:6666解释:将6插入到666的最后一位,形成6666。
思路
- 理解问题:我们需要找到一个位置,将
b插入到a中,使得形成的数字最大。 - 插入位置选择:
- 如果
b大于等于a的某一位数字,则将b插入到该位之前。 - 否则,将
b插入到最后一位。
- 如果
- 实现方法:
- 将
a转换为字符串,逐位比较b和a的每一位数字。 - 找到第一个大于等于
b的位置,将b插入到该位置。 - 如果没有找到这样的位置,则将
b插入到最后一位。
- 将
图解
假设 a = 76543,b = 4:
- 将
a转换为字符串:"76543" - 逐位比较
b和a的每一位数字:4<7,继续比较4<6,继续比较4<5,继续比较4<4,继续比较4>3,将4插入到3之前
- 形成的新数字为
765443
代码详解
def solution(a: int, b: int) -> int:
# 将 a 转换为字符串
a_str = str(a)
# 遍历 a 的每一位数字
for i in range(len(a_str)):
# 将当前位数字转换为整数
current_digit = int(a_str[i])
# 如果 b 大于等于当前位数字,则将 b 插入到当前位置
if b >= current_digit:
return int(a_str[:i] + str(b) + a_str[i:])
# 如果没有找到合适的插入位置,将 b 插入到最后一位
return int(a_str + str(b))
if __name__ == '__main__':
print(solution(76543, 4) == 765443) # True
print(solution(1, 0) == 10) # True
print(solution(44, 5) == 544) # True
print(solution(666, 6) == 6666) # True
知识总结
新知识点
- 字符串操作:
- 将整数转换为字符串:
str(a) - 字符串切片:
a_str[:i]和a_str[i:] - 字符串拼接:
a_str[:i] + str(b) + a_str[i:]
- 将整数转换为字符串:
- 条件判断:
- 使用
if语句进行条件判断,决定插入位置。
- 使用
自己的理解
- 字符串操作:通过将整数转换为字符串,可以方便地逐位比较和插入数字。
- 条件判断:通过条件判断找到合适的插入位置,确保插入后的数字最大。
豆包Marscode体验
豆包Marscode给出了详细的问题理解和步骤解释,对于解答问题有很大帮助。比如给出了如何判断插入点,但是直接提问的话,给出的答案几乎直抵最终结果,如果能够有引导性地给出答案则更好。