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

136 阅读3分钟

小U的数字插入问题

小U的数字插入问题 - MarsCode

摘要

在这个问题中,小U需要将一个非负整数 bb 插入到另一个正整数 aa 的某个位置,以形成一个可能的最大数字。为了找到这个插入位置,我们需要找到一种策略,确保插入后的结果尽可能大。本文将通过具体的测试样例和算法步骤来阐明如何解决这个问题,并提供Go语言和Python的解决方案。

问题描述

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

测试样例

  1. 输入: a=76543a = 76543, b=4b = 4输出: 765443
  2. 输入: a=1a = 1, b=0b = 0输出: 10
  3. 输入: a=44a = 44, b=5b = 5输出: 544
  4. 输入: a=666a = 666, b=6b = 6输出: 6666

解决思路

  1. 字符串转换

    • 为了在任意位置插入数字,可以先将整数 aabb 转换为字符串 a_strb_str,以便逐字符比较和插入。
  2. 从左到右寻找最佳插入位置

    • 遍历字符串 a_str,从左到右依次检查,如果发现当前字符后的子字符串与 b_str 比较能够形成更大的结果,则在该位置插入。
  3. 边界情况处理

    • 如果在遍历整个 a_str 期间没有找到更好的插入点,那么直接将 bb 插入到 aa 的最后。

代码实现

Go 语言实现(原始版本)

package main

import (
	"fmt"
	"strconv"
)

// 将 b 插入 a 中的最佳位置以形成最大数
func solution(a int, b int) int {
	// 将 a 和 b 转为字符串
	aStr := strconv.Itoa(a)
	bStr := strconv.Itoa(b)

	// 从左到右寻找第一个可以插入的位置
	for i := 0; i < len(aStr); i++ {
		// 比较 bStr 和当前的字符(从当前字符开始进行多位比较)
		if bStr > aStr[i:] {
			// 将 b 插入到当前位置
			newNumber := aStr[:i] + bStr + aStr[i:]
			result, _ := strconv.Atoi(newNumber)
			return result
		}
	}

	// 如果没有找到合适的插入点,则将 b 插入到最后
	newNumber := aStr + bStr
	result, _ := strconv.Atoi(newNumber)
	return result
}

func main() {
	// 测试用例
	fmt.Println(solution(76543, 4))   // 输出:765443
	fmt.Println(solution(1, 0))       // 输出:10
	fmt.Println(solution(44, 5))      // 输出:544
	fmt.Println(solution(13, 15))     // 输出:1513
}

Python 版本实现(原始版本)

def solution(a: int, b: int) -> int:
    """
    将数字 b 插入数字 a 中的最佳位置以形成最大数。
    
    :param a: 原始数字
    :param b: 需要插入的数字
    :return: 插入后的最大数字
    """
    # 将 a 和 b 转换为字符串
    a_str = str(a)
    b_str = str(b)

    # 从左到右寻找第一个可以插入的位置
    for i in range(len(a_str)):
        # 比较 b_str 和当前字符后面的子字符串(从当前字符开始进行多位比较)
        if b_str > a_str[i:]:
            # 将 b 插入到当前位置
            new_number = a_str[:i] + b_str + a_str[i:]
            return int(new_number)

    # 如果没有找到合适的插入点,则将 b 插入到最后
    new_number = a_str + b_str
    return int(new_number)

if __name__ == "__main__":
    # 测试用例
    print(solution(76543, 4))   # 输出:765443
    print(solution(1, 0))       # 输出:10
    print(solution(44, 5))      # 输出:544
    print(solution(13, 15))     # 输出:1513

复杂度分析

  • 时间复杂度: O(m)O(m),其中 mm 是数字 aa 的位数,因为我们需要遍历每一位来寻找插入点。
  • 空间复杂度: O(m+n)O(m + n),用于存储字符串形式的 aabb