小U的数字插入问题
问题描述 小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
解题思路 问题理解 我们需要将数字 b 插入到数字 a 的某个位置,使得插入后的数字最大。
解题思路 转换为字符串:由于我们需要在数字的不同位置插入 b,将 a 和 b 转换为字符串处理会更方便。 遍历插入位置:我们可以尝试将 b 插入到 a 的每一个可能的位置,然后比较这些结果,找出最大的那个。 比较结果:将每次插入后的结果转换回整数进行比较,记录最大的结果。 算法步骤 将 a 和 b 转换为字符串。 初始化一个变量 max_result 来存储最大的结果。 遍历 a 的每一个位置,尝试将 b 插入到该位置,生成新的字符串。 将新生成的字符串转换为整数,并与 max_result 比较,更新 max_result。 返回 max_result。
最终代码:
c++:
`#include <bits/stdc++.h>
#include <string>
#include <vector>
using namespace std;
int solution(int a, int b) {
string stra = to_string(a);
string strb = to_string(b);
int max_result = 0;
for (int i = 0; i <= stra.size(); ++i) {
// 尝试将 b 插入到位置 i
string new_str = stra.substr(0, i) + strb + stra.substr(i);
// 将新字符串转换为整数
int new_num = stoi(new_str);
// 更新最大结果
if (new_num > max_result) {
max_result = new_num;
}
}
return max_result;
}
int main() {
cout << (solution(76543, 4) == 765443) << endl;
cout << (solution(1, 0) == 10) << endl;
cout << (solution(44, 5) == 544) << endl;
cout << (solution(666, 6) == 6666) << endl;
return 0;
}`
python:
`def solution(a: int, b: int) -> int:
# 将 a 和 b 转换为字符串
str_a = str(a)
str_b = str(b)
# 初始化最大结果
max_result = 0
# 遍历 a 的每一个位置
for i in range(len(str_a) + 1):
# 尝试将 b 插入到位置 i
new_str = str_a[:i] + str_b + str_a[i:]
# 将新字符串转换为整数
new_num = int(new_str)
# 更新最大结果
if new_num > max_result:
max_result = new_num
return max_result
# 测试用例
print(solution(76543, 4) == 765443) # 输出: True
print(solution(1, 0) == 10) # 输出: True
print(solution(44, 5) == 544) # 输出: True
print(solution(666, 6) == 6666) # 输出: True`