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

164 阅读2分钟

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

问题描述

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

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

问题分析

这个题目就是要把一个数字插入到另一个数字里,进而得到一个最大的数字

解题思路

第一版(错误的):

  1. 把a变成一个数组
  2. 遍历a找到小于等于b的数
  3. 把b插入到这个数的前面
  4. 如果没有则放在最后
  5. 最后把数组变回数字并返回

第二版(正确的):

  1. 将整数 a 转换为字符串
  2. 将整数 b 转换为字符串
  3. 初始最大值max_num 为将 b 插入到末尾
  4. 遍历字符串 s,尝试将 b 插入到位置 i,如果这是的值大于max_num ,就更新max_num
  5. 返回最大值max_num

解题代码

第一版(错误的):

def solution(a: int, b: int) -> int:
    # write code here
    l = [int(digit) for digit in str(a)]
    
    for i in range(len(l)):
        if l[i] < b:
         	l.insert(i,b)
        	break
      
        if i == len(l) - 1:
        	l.append(b)
    
    str_number = ''.join(map(str, l))
    return_a = int(str_number)

    return return_a

第二版(正确的):

def solution(a: int, b: int) -> int:
    # write code here
    s = str(a)
    b_str = str(b)
    max_num = int(s + b_str)  
    
    for i in range(len(s) + 1):
        new_num = int(s[:i] + b_str + s[i:])
        if new_num > max_num:
            max_num = new_num
    
    return max_num

总结与思考

遇到的问题

  1. 刚开始的时候,我先把整数a转换成数组,找到比b小的位置,把b插入到该数前面,如果没有则最后添加b,但是这个方法是错的
  2. 一开始我还在这个基础上改进,越改发现有越多种可能性,然后我就放弃这个方法,重新想了一个解决方法

收获与感悟

在发现自己之前的解题思路不对的时候,要过段放弃,想个新的思路,不要和错误的思路硬磕,不仅不能正确地解题,还浪费时间。然后我们解题前要考虑到每种情况,不能局限于题干给出的测试用例,这样很容易找不到正确的解题方法。在编写代码时,注意代码的清晰性和可维护性。使用有意义的变量名和添加必要的注释可以帮助其他人更好地理解代码。然后我们要对代码进行充分的测试,确保它在各种情况下都能正确运行。这包括边界情况和特殊输入。