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

73 阅读3分钟

问题描述

小U手中有两个数字:ab。其中,a是一个任意的正整数,而b是一个非负整数。她的任务是将数字b插入到数字a的某个位置,以形成一个最大的可能数字。

你需要帮助小U找到一个插入位置,输出插入后的最大结果。

解题思路

这个问题要求我们通过将数字b插入到a的不同位置来形成最大的数字。思路如下:

  1. 数字转换为字符串: 将数字ab转换为字符串类型,这样便于我们在不同位置进行插入操作。
  2. 遍历所有可能的插入位置: 我们可以尝试将数字b插入到数字a的每个可能位置。数字alen(a_str)+1个位置,包含了在字符串开头和末尾插入的情况。
  3. 生成新数字并比较大小: 每插入一次,就生成一个新的数字,并将其转换为整数。我们记录下所有可能的插入结果,最终返回最大的数字。
  4. 返回结果: 比较所有插入后的结果,返回最大的那个数字。

代码实现

def solution(a: int, b: int) -> int:
    max_num = 0  # 初始化最大结果为0
    a_str = str(a)  # 将a转换为字符串
    b_str = str(b)  # 将b转换为字符串
    
    # 遍历所有插入位置
    for i in range(len(a_str) + 1):
        new_num_str = a_str[:i] + b_str + a_str[i:]  # 在第i位置插入b
        new_num = int(new_num_str)  # 将新数字转换为整数
        
        # 更新最大值
        if new_num > max_num:
            max_num = new_num
            
    return max_num  # 返回最大值

if __name__ == '__main__':
    # 添加测试用例
    print(solution(76543, 4) == 765443)  # 输出: 765443
    print(solution(1, 0) == 10)         # 输出: 10
    print(solution(44, 5) == 544)       # 输出: 544
    print(solution(666, 6) == 6666)     # 输出: 6666

示例分析

  • 样例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,这是最大的数字。

复杂度分析

  • 时间复杂度
    对于每个插入位置,我们需要生成一个新的数字,生成和比较的时间复杂度是O(n),其中n是数字a的位数。因为我们遍历a的所有位置进行插入,所以总的时间复杂度为O(n^2)。
  • 空间复杂度
    存储字符串的空间复杂度是O(n),其中n是数字a的位数。总的空间复杂度为O(n)。