青训营创作笔记活动

102 阅读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

思路 数字转换: 将数字 a 和数字 b 转换为字符串。这样我们可以方便地操作字符串,比如在不同位置插入字符。 插入操作: 对于每一个可能的位置,尝试将 b 插入到 a 中。 我们需要比较每次插入后的结果,选择字典序最大的结果。 插入规则:

将 b 插入到数字 a 的每一个位置,构造一个新的数字,并选择其中最大的数字。 代码实现 我将遍历 a 中每个位置,并在该位置插入 b,然后通过比较不同插入后的结果,找出最大的数字。

代码解析 转换数字为字符串: 使用 to_string(a) 和 to_string(b) 将整数 a 和 b 转换为字符串形式,以便于字符串操作。 初始化最大数字:

初始的最大数字是将 b 插入到 a 的末尾的结果。我们先将 b 加到 a 字符串的末尾,然后通过遍历每个位置进行比较。 遍历所有插入位置:

我们使用 substr(i) 来切割字符串。a_str.substr(0, i) 取 a 中从索引 0 到 i-1 的部分,a_str.substr(i) 取从索引 i 到末尾的部分。 然后将 b_str 插入到这个位置,形成新的字符串,并与当前的最大值进行比较,更新最大值。 输出最大值:

最后,返回通过 stoi 将最终的最大字符串转换回整数。 示例分析 样例1: 输入:a = 76543, b = 4

插入的位置选择: 插入到第 0 位:476543 插入到第 1 位:746543 插入到第 2 位:764543 插入到第 3 位:765443(最大) 输出:765443 样例2: 输入:a = 1, b = 0

插入的位置选择: 插入到第 0 位:01 插入到第 1 位:10(最大) 输出:10 样例3: 输入:a = 44, b = 5

插入的位置选择: 插入到第 0 位:544 插入到第 1 位:545 插入到第 2 位:44(最小) 输出:544 样例4: 输入:a = 666, b = 6

插入的位置选择: 插入到第 0 位:6666 插入到第 1 位:6666 插入到第 2 位:6666 插入到第 3 位:6666(最大) 输出:6666 时间复杂度 假设 a 的长度为 n,则我们需要遍历 n + 1 个位置来插入 b。 每次插入操作和字符串的比较操作都需要 O(n) 时间,因此总的时间复杂度是 O(n^2),其中 n 是 a 的位数。 这个算法在绝大多数情况下是可行的,尤其是当 a 不是非常大的时候。