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

55 阅读3分钟

一、问题描述

小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

问题分析:

1. 理解问题要求 我们需要将非负整数 插入到正整数 的某个位置,使得形成的新数字最大。这意味着要找到一个合适的插入点,使得新数字在所有可能的插入情况中是最大的。

2. 考虑不同情况 (1)当 b大于a  的最高位数字时

(2)当 b小于a 的最高位数字时

(3)当a  只有一位数字时,直接将b  放在a  的后面即可得到最大结果

  (4)当 b为 0且 的最高位不为0  时,将 b插入到 a的最前面得到的数字会比插入到其他位置小(因为 0在前面会使数字变小

实现代码(Java)

public class Main {    public static int solution(int a, int b) {        String num1 = String.valueOf(a);        String num2 = String.valueOf(b);        long max = Long.MIN_VALUE;        for (int i = 0; i <= num1.length(); i++) {            String newNum = num1.substring(0, i) + num2 + num1.substring(i);            long current = Long.parseLong(newNum);            if (current > max) {                max = current;            }        }        return (int) max;    }    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);    }}

代码解释如下:

 insertToMaximize方法: 首先,将输入的整数 a 和 b 分别转换为字符串 numA 和 numB,这样便于在数字 a 的不同位置插入数字 b。 然后,初始化一个变量 maxValue 为 Integer.MIN_VALUE,用于存储在遍历过程中找到的最大结果。 接下来,通过一个循环遍历数字 a 的每一个可能插入位置。循环从索引 0 开始,到 numA.length() 结束(包括在末尾插入的情况)。

在每次循环中: 构建一个新的字符串 newNum,它是通过将数字 a 在索引 i 处分割成两部分,然后在中间插入数字 b 得到的。 将新构建的字符串 newNum 转换回整数 currentValue。 如果 currentValue 大于当前的 maxValue,就更新 maxValue 为 currentValue。 

最后,返回 maxValue,即插入数字 b 后能得到的最大整数。 main方法: 创建一个 Scanner 对象用于从控制台读取用户输入。 提示用户输入正整数 a 和非负整数 b,并分别读取它们的值。 调用 insertToMaximize 方法计算插入后的最大结果,并将结果输出到控制台。 最后,关闭 Scanner 对象以释放相关资源。

 通过以上代码,就可以根据用户输入的正整数 a 和非负整数 b,找到将 b 插入到 a 中能得到的最大整数并输出。

学习心得:

通过解决这类问题可以加深对数字处理和字符串操作的理解。在实际编程中,经常会遇到需要对数字进行各种变换和组合的情况,将数字转换为字符串来处理可以更方便地实现一些复杂的逻辑,比如本题中在不同位置插入数字的操作。同时,通过不断比较和更新最大值的过程,也能进一步熟悉循环和条件判断的运用,提升逻辑思维和编程能力。