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

39 阅读2分钟

题目描述

小U手中有两个数字 a 和 b。第一个数字 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 转换成字符串形式,以便我们能够插入数字 b 到不同的位置。 遍历插入位置:遍历字符串 a 中所有可能的插入位置,将字符串 b 插入到每一个可能的位置,并生成新的数字。 比较大小:比较每次生成的数字,找到最大的那个。 返回结果:输出最大数字。

代码实现

public class Main {
    public static int solution(int a, int b) {
        // 将数字 a 和 b 转换为字符串
        String strA = Integer.toString(a);
        String strB = Integer.toString(b);
        
        // 初始化最大结果
        int maxResult = Integer.MIN_VALUE;
        
        // 遍历字符串 strA 的每一个位置
        for (int i = 0; i <= strA.length(); i++) {
            // 尝试将 strB 插入到 strA 的第 i 个位置
            String newStr = strA.substring(0, i) + strB + strA.substring(i);
            
            // 将新字符串转换为整数
            int newNum = Integer.parseInt(newStr);
            
            // 更新最大结果
            if (newNum > maxResult) {
                maxResult = newNum;
            }
        }
        
        // 返回最大结果
        return maxResult;
    }

    public static void main(String[] args) {
        System.out.println(solution(76543, 4) == 765443);
        System.out.println(solution(1, 0) == 10);
        System.out.println(solution(44, 5) == 544);
        System.out.println(solution(666, 6) == 6666);
    }
}

知识总结

  1. 转换为字符串:使用 Integer.toString() 将 a 和 b 转换为字符串。
  2. 遍历插入位置:使用 for 循环遍历字符串 strA 的每一个位置。
  3. 插入操作:使用 substring 方法将 strB 插入到 strA 的指定位置。
  4. 转换为整数:使用 Integer.parseInt() 将新字符串转换为整数。
  5. 更新最大结果:比较新整数与当前最大结果,更新最大结果。
  6. 返回结果:返回最终的最大结果。

关键点:

  • 插入位置的选择:需要考虑插入位置对结果的影响。
  • 比较插入结果:需要比较所有可能的插入结果,选择最大的一个。