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

54 阅读4分钟

问题描述

小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 转换为字符串形式会更方便操作。

算法步骤

  1. 转换为字符串:将 a 和 b 转换为字符串形式,以便进行插入操作。
  2. 遍历插入位置:遍历 a 的每一个可能的插入位置(包括在开头和结尾)。
  3. 生成新数字:在每个位置插入 b,生成一个新的数字。
  4. 比较大小:比较所有生成的数字,选择最大的一个。
  5. 返回结果:将最大的数字转换回整数形式并返回。

关键点

  • 插入位置的选择:需要考虑在每个字符的前面插入 b,以及在最后插入 b
  • 比较大小:需要将生成的字符串转换为整数进行比较。

通过这些步骤,你可以找到插入 b 后形成的最大数字。希望这些思路对你有帮助!

代码

# insert b to a, find bigget result

def solution(a: int, b: int) -> int:
    # insert b to a
    str_a = str(a)
    str_b = str(b)

    ans = str_a

    for i, digit in enumerate(str_a):
        # compare b to corresponding digits in a
        if int(str_b) <= int(str_a[i : i + len(str_b)].ljust(len(str_b),'0')):
            continue
        else:
            # insert
            ans = str_a[0:i] + str_b + str_a[i:]
            break

    # if not insert, then insert to the end
    if ans == str(a):
        ans = str_a + str_b

    return int(ans)

if __name__ == '__main__':
    print(solution(76543, 4) == 765443)
    print(solution(1, 0) == 10)
    print(solution(44, 5) == 544)
    print(solution(666, 6) == 6666)
    print(solution(9, 15) == 915)
    print(solution(17, 1) == 171)
    print(solution(12,15) == 1512)

这段代码的目的是在整数 a 中找到合适的位置插入整数 b,使得插入后的结果最大。下面是对代码的详细解释:

函数 solution

  1. 输入参数

    • a: 一个整数,表示要插入数字的原始数。
    • b: 一个整数,要插入的数字。
  2. 将输入转换为字符串

    • str_aa 转换为字符串的结果。
    • str_bb 转换为字符串的结果。
    • ans 初始化为 str_a
  3. 遍历字符串 str_a 的每一位

    • 使用 enumerate 遍历 str_ai 是当前位的索引,digit 是该位字符。
    • 通过比较 ba 的某部分,决定是否插入:
      • 如果 b 小于等于 a 当前位开始的截取(长度为 str_b 的字符串),则继续下一个循环。
      • 否则,在当前位置 i 插入 b,并更新 ans 为插入后的新字符串,然后跳出循环。
  4. 处理未插入的情况

    • 如果直到结束都没有插入(ans 仍然等于原始的 str_a),则将 b 插入到 a 的末尾。
  5. 返回结果

    • ans 转换回整数并返回。

主程序部分

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
  • print(solution(9, 15) == 915) 返回 True
  • print(solution(17, 1) == 171) 返回 True
  • print(solution(12, 15) == 1512) 返回 True

代码逻辑总结

整体而言,代码的核心逻辑是通过比较和遍历,寻找一个最佳的插入位置,将整数 b 插入到整数 a 中,以使结果尽量大。