小U的数字插入问题 | 豆包MarsCode AI刷题

88 阅读3分钟

问题描述

小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手中有两个数字 ab。第一个数字 a 是一个任意的正整数,而第二个数字 b 是一个非负整数。她的任务是将第二个数字 b 插入到第一个数字 a 的某个位置,以形成一个最大的可能数字。你需要帮助小U找到这个插入位置,输出插入后的最大结果。

测试样例

  1. 输入:a = 76543, b = 4 输出:765443 解释:将 4 插入到 76543 的最后一位,形成 765443

  2. 输入:a = 1, b = 0 输出:10 解释:将 0 插入到 1 的最后一位,形成 10

  3. 输入:a = 44, b = 5 输出:544 解释:将 5 插入到 44 的第一位,形成 544

  4. 输入:a = 666, b = 6 输出:6666 解释:将 6 插入到 666 的最后一位,形成 6666

思路

  1. 理解问题:我们需要找到一个位置,将 b 插入到 a 中,使得形成的数字最大。
  2. 插入位置选择
    • 如果 b 大于等于 a 的某一位数字,则将 b 插入到该位之前。
    • 否则,将 b 插入到最后一位。
  3. 实现方法
    • a 转换为字符串,逐位比较 ba 的每一位数字。
    • 找到第一个大于等于 b 的位置,将 b 插入到该位置。
    • 如果没有找到这样的位置,则将 b 插入到最后一位。

图解

假设 a = 76543b = 4

  1. a 转换为字符串:"76543"
  2. 逐位比较 ba 的每一位数字:
    • 4 < 7,继续比较
    • 4 < 6,继续比较
    • 4 < 5,继续比较
    • 4 < 4,继续比较
    • 4 > 3,将 4 插入到 3 之前
  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

知识总结

新知识点

  1. 字符串操作
    • 将整数转换为字符串:str(a)
    • 字符串切片:a_str[:i]a_str[i:]
    • 字符串拼接:a_str[:i] + str(b) + a_str[i:]
  2. 条件判断
    • 使用 if 语句进行条件判断,决定插入位置。

自己的理解

  • 字符串操作:通过将整数转换为字符串,可以方便地逐位比较和插入数字。
  • 条件判断:通过条件判断找到合适的插入位置,确保插入后的数字最大。

豆包Marscode体验

豆包Marscode给出了详细的问题理解和步骤解释,对于解答问题有很大帮助。比如给出了如何判断插入点,但是直接提问的话,给出的答案几乎直抵最终结果,如果能够有引导性地给出答案则更好。