[LeetCode]415. 字符串相加、43. 字符串相乘
题目 415. 字符串相加
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
题解
维护一个temp表示当前两数相加+上一个进位的和。
每次更新结果的一位。
注意终止条件。
最后将结果串reverse()。
代码
class Solution {
public String addStrings(String num1, String num2) {
StringBuilder str = new StringBuilder();
int temp =0;
int i=num1.length()-1;
int j=num2.length()-1;
while(i>=0||j>=0||temp>0){
int n1 = i>=0? num1.charAt(i--)-'0':0;
int n2 = j>=0? num2.charAt(j--)-'0':0;
temp +=n1+n2;
str.append(temp%10);
temp/=10;
}
return str.reverse().toString();
}
}
题目 43. 字符串相乘
题解
- num1长度为M,num2长度为N,则结果最长长度M+N。
- 竖式相加优化:num1[i] x num2[j] 的结果tmp最长两位,其第一位位于 res[i+j],第二位位于 res[i+j+1]。
- 故每次更新tmp=num1[i] x num2[j]+进位,然后更新 res[i+j]、res[i+j+1]两位,注意
res[i+j]+=tmp/10;
是+=。
-用整型数组存结果,最后StringBuilder连接结果即可。
图片来源:https://leetcode-cn.com/problems/multiply-strings/solution/you-hua-ban-shu-shi-da-bai-994-by-breezean/
代码
class Solution {
public String multiply(String num1, String num2) {
int len=num1.length()+num2.length();
int[] res = new int[len];
for(int i=num1.length()-1;i>=0;--i){
for(int j = num2.length()-1;j>=0;--j){
int tmp = (num1.charAt(i)-'0')*(num2.charAt(j)-'0')+res[i+j+1];//方便进位加入十位统一处理
res[i+j+1]=tmp%10;
res[i+j]+=tmp/10; //具体看竖试可理解
}
}
StringBuilder product = new StringBuilder();
int begPos = 0;
while(res[begPos]==0&&begPos<len-1){
begPos++;
}
for(int i=begPos;i<len;++i){
product.append(res[i]);
}
return product.toString();
}
}
posted on 2020-05-21 18:11 coding_gaga 阅读(161) 评论(0) 编辑 收藏 举报
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 2025成都.NET开发者Connect圆满结束
· 后端思维之高并发处理方案
· 千万级大表的优化技巧
· 在 VS Code 中,一键安装 MCP Server!
· 10年+ .NET Coder 心语 ── 继承的思维:从思维模式到架构设计的深度解析
2019-05-21 [程序员代码面试指南]第9章-在两个长度相等的排序数组中找到第k小的数(二分)
2019-05-21 [程序员代码面试指南]第9章-在两个长度相等的排序数组中找到上中位数(二分)