本题的任务是将一个非负整数 bbb 插入到一个正整数 aaa 的某个位置,以构造出可能的最大数。插入位置可以在 aaa 的每一位之间(包括最前面或最后面)。
示例分析:
-
样例 1:a=76543,b=4a = 76543, b = 4a=76543,b=4
-
将 b=4b = 4b=4 插入 aaa 的所有可能位置:
- 插入最前面:476543476543476543
- 插入第 1 位后:746543746543746543
- 插入第 2 位后:764543764543764543
- 插入第 3 位后:765443765443765443
- 插入第 4 位后:765434765434765434
- 插入最后:765434765434765434
-
最大值为 765443765443765443。
-
-
样例 2:a=12,b=15a = 12, b = 15a=12,b=15
-
将 b=15b = 15b=15 插入 aaa 的所有可能位置:
- 插入最前面:151215121512
- 插入第 1 位后:115211521152
- 插入最后:121512151215
-
最大值为 151215121512。
-
-
样例 3:a=1,b=0a = 1, b = 0a=1,b=0
- 插入 b=0b = 0b=0 到 a=1a = 1a=1 的位置,结果分别为 010101 和 101010。
- 最大值为 101010。
解题思路
-
遍历插入位置:
- 遍历 aaa 的每一位,将 bbb 插入到该位置,形成一个新数字。
-
构造新数:
- 将 aaa 分为两部分:前半部分和后半部分。
- 插入 bbb 后,新的数字为:前半部分 + bbb + 后半部分。
-
更新最大值:
- 每次计算出的新数字与当前最大值比较,更新最大值。
-
最终输出:
- 遍历结束后,输出最大的数字。
代码实现
java
复制代码
public class Main {
public static int solution(int a, int b) {
// 将 a 和 b 转换为字符串,便于插入操作
String aStr = String.valueOf(a);
String bStr = String.valueOf(b);
// 初始化最大值为最小的可能数
int maxValue = Integer.MIN_VALUE;
// 遍历插入位置
for (int i = 0; i <= aStr.length(); i++) {
// 构造新的数字
String newNumber = aStr.substring(0, i) + bStr + aStr.substring(i);
// 更新最大值
maxValue = Math.max(maxValue, Integer.parseInt(newNumber));
}
return maxValue;
}
public static void main(String[] args) {
// 测试样例
System.out.println(solution(76543, 4) == 765443); // true
System.out.println(solution(1, 0) == 10); // true
System.out.println(solution(44, 5) == 544); // true
System.out.println(solution(666, 6) == 6666); // true
System.out.println(solution(12, 15) == 1512); // true
}
}
代码解析
-
字符串转换:
- 将数字 aaa 和 bbb 转换为字符串,方便实现插入操作。
-
插入逻辑:
- 遍历 iii 从 0 到 aStr.length()aStr.length()aStr.length()(包括最后一个位置),逐步将 bbb 插入 aaa 的各个位置。
-
最大值更新:
- 每次生成的新数字转为整数后,与当前最大值比较,更新最大值。
-
返回结果:
- 遍历完成后,返回最终最大值。
测试用例分析
-
样例 1:a=76543,b=4a = 76543, b = 4a=76543,b=4
- 插入后可能的数字为 [476543, 746543, 764543, 765443, 765434]。
- 最大值为 765443765443765443。
-
样例 2:a=12,b=15a = 12, b = 15a=12,b=15
- 插入后可能的数字为 [1512, 1152, 1215]。
- 最大值为 151215121512。
-
样例 3:a=1,b=0a = 1, b = 0a=1,b=0
- 插入后可能的数字为 [01, 10]。
- 最大值为 101010。
-
样例 4:a=44,b=5a = 44, b = 5a=44,b=5
- 插入后可能的数字为 [544, 454]。
- 最大值为 544544544。
-
样例 5:a=666,b=6a = 666, b = 6a=666,b=6
- 插入后可能的数字为 [6666, 6666, 6666, 6666]。
- 最大值为 666666666666。
复杂度分析
-
时间复杂度: O(n)O(n)O(n)
- 遍历插入 bbb 的所有可能位置,次数与 aaa 的位数 nnn 成正比。
-
空间复杂度: O(n)O(n)O(n)
- 新生成的字符串占用额外的空间。
总结
-
题目核心:
- 需要找到一个合适的位置将 bbb 插入到 aaa 中,使得数字最大化。
- 遍历所有可能的位置,比较生成的数字,找出最大值。
-
常见错误:
- 忽略多位数 bbb 的插入处理。
- 忘记检查插入最前和最后的情况。
-
改进方向:
- 如果数字较大,可以尝试直接构造规律避免遍历,进一步优化性能。
通过该题,可以熟练掌握字符串操作和数字构造的基本技巧,同时提高对最大值构造问题的理解。