【MarsCode】每日一题 (字符串)之 小U的数字插入问题
小U的数字插入问题
1.问题描述
小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
2.思路与题解
-
理解问题:我们需要将数字
b插入到数字a的某个位置,使得插入后的数字最大。 -
数据结构选择:将数字
a和b转换为字符串,方便递归操作。 -
算法步骤
:
- 将数字
a和b转换为字符串。 - 使用递归函数遍历字符串
a,尝试在每个位置插入b,并比较结果。 - 返回最大结果。
- 将数字
2.4代码框架
Java
▼java复制代码public class Main { public static int solution(int a, int b) { // write code here String strA= Integer.toString(a); // 将数字 b 转换为字符串 String strB = Integer.toString(b); // 初始化最大结果为插入到最前面的情况 String maxResult = strB + strA; // 遍历 strA 的每个位置,尝试插入 strB for (int i = 0; i <= strA.length(); i++) { // 构建插入后的字符串 String candidate = strA.substring(0, i) + strB + strA.substring(i); // 比较并更新最大结果 if (candidate.compareTo(maxResult) > 0) { maxResult = candidate; } } // 将最大结果转换回整数并返回 return Integer.parseInt(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); } }
C++
▼c++复制代码#include <iostream> #include <string> #include <algorithm> int solution(int a, int b) { // 将数字 a 转换为字符串 std::string strA = std::to_string(a); // 将数字 b 转换为字符串 std::string strB = std::to_string(b); // 初始化最大结果为插入到最前面的情况 std::string maxResult = strB + strA; // 遍历 strA 的每个位置,尝试插入 strB for (int i = 0; i <= strA.length(); i++) { // 构建插入后的字符串 std::string candidate = strA.substr(0, i) + strB + strA.substr(i); // 比较并更新最大结果 if (candidate > maxResult) { maxResult = candidate; } } // 将最大结果转换回整数并返回 return std::stoi(maxResult); } int main() { std::cout << (solution(76543, 4) == 765443) << std::endl; std::cout << (solution(1, 0) == 10) << std::endl; std::cout << (solution(44, 5) == 544) << std::endl; std::cout << (solution(666, 6) == 6666) << std::endl; return 0; }
Python
▼python复制代码def solution(a, b): # 将数字 a 转换为字符串 strA = str(a) # 将数字 b 转换为字符串 strB = str(b) # 初始化最大结果为插入到最前面的情况 maxResult = strB + strA # 遍历 strA 的每个位置,尝试插入 strB for i in range(len(strA) + 1): # 构建插入后的字符串 candidate = strA[:i] + strB + strA[i:] # 比较并更新最大结果 if candidate > maxResult: maxResult = candidate # 将最大结果转换回整数并返回 return int(maxResult) if __name__ == "__main__": print(solution(76543, 4) == 765443) print(solution(1, 0) == 10) print(solution(44, 5) == 544) print(solution(666, 6) == 6666)
Golang
▼go复制代码package main import ( "fmt" "strconv" ) func solution(a, b int) int { // 将数字 a 转换为字符串 strA := strconv.Itoa(a) // 将数字 b 转换为字符串 strB := strconv.Itoa(b) // 初始化最大结果为插入到最前面的情况 maxResult := strB + strA // 遍历 strA 的每个位置,尝试插入 strB for i := 0; i <= len(strA); i++ { // 构建插入后的字符串 candidate := strA[:i] + strB + strA[i:] // 比较并更新最大结果 if candidate > maxResult { maxResult = candidate } } // 将最大结果转换回整数并返回 result, _ := strconv.Atoi(maxResult) return result } func main() { fmt.Println(solution(76543, 4) == 765443) fmt.Println(solution(1, 0) == 10) fmt.Println(solution(44, 5) == 544) fmt.Println(solution(666, 6) == 6666) }
2.5一些疑难的代码解释
- 字符串转换:将
a和b转换为字符串,方便递归操作。 - 递归函数:定义递归函数
findMaxInsertion,尝试在每个位置插入b,并比较结果。 - 递归终止条件:当
index超过strA的长度时,返回当前结果。 - 比较结果:比较当前插入结果和下一个位置的插入结果,返回较大的一个。
3.欢迎大佬们关注或莅临本渣的一些个人website
gitee: https://gitee.com/xiao-chenago github:https://github.com/cool-icu0 语雀:https://www.yuque.com/icu0 csdn:https://cool-icu.blog.csdn.net/
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
内容推荐
🚩JavaD141、今天看了try-catch-finally和函数式编程,lamda有点类似Swift中的闭包,还没彻底理解,似懂非懂2、五座山头刷题,靠理解的话,得分50,靠答题规则记忆,得分95,总体还是似懂非懂3、看书《Head First设计模式》(第二版)的工厂设计模式和代理设计模式(李文华的视频提到了两种设计模式,就顺便有岔路去看了,以免天天被五座山头逼疯了)
2
day41今天自己修改了一下简历,用作投AI应用开发岗位,还不是很完善,先用老鱼简历做一个简单的。后年用AI优化了一下。今天主要是对AI超级智能体的总结还有简历优化,后续继续学新项目,我觉得写项目是学知识的最佳途径,相比于死板板的理论,实践起来,记忆更佳。但是基础的还是要看,不然跟着写项目都写不明白。算法一题,Java基础。用友有一个笔试邀约,9月第一个笔试。其他的投完简历的都还没回信,科大讯飞的
2
怎么想到厘米和英尺英寸转换的代码是这样写?
2
Day 14✅ 今天做了:前端Vue终于学完了⏰ 明天计划:就差Linux部署和Docker了, 争取今天看完
0
Day 12🧭行动:这次学习了匿名函数与变量定义🤓体会:这两种方法都能提高代码的可读性与可维护性,在特定情况都有很大作用🧑💻代码:#变量定义-指定类型注解abc: int = 915score1: float= 95.5hobby2: str = "python"result: bool = Truecba: None = Noneenglish: list[str] = ["A","B
2
