[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();
}
}
[LeetCode]415. 字符串相加、43. 字符串相乘的更多相关文章
- 代码题(59)— 字符串相加、字符串相乘、打印最大n位数
1.415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 思路:和链表相加类似,求进位. class Solution { public: string addS ...
- Java中字符串相加和字符串常量相加区别
有一道这样的程序: public class TestStringDemo { public static void main(String[] args) { String s1 = "P ...
- Python字符串相加以及字符串格式化
1.在Python中字符串a占用一块内存地址,字符串b也占用一块内存地址,当字符串a+b时,又会在内存空间中开辟一块新的地址用来存放a+b. a 地址一 b 地址二 a+b 地址三 因此内存中就占了三 ...
- LeetCode 43. 字符串相乘(Multiply Strings)
43. 字符串相乘 43. Multiply Strings 题目描述 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. ...
- LeetCode:字符串相加【415】
LeetCode:字符串相加[415] 题目描述 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 注意: num1 和num2 的长度都小于 5100.num1 和num2 都只 ...
- Java实现 LeetCode 415 字符串相加
415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 注意: num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num ...
- Java实现 LeetCode 43 字符串相乘
43. 字符串相乘 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2& ...
- T-SQL字符串相加之后被截断的那点事
本文出处:http://www.cnblogs.com/wy123/p/6217772.html 字符串自身相加, 虽然赋值给了varchar(max)类型的变量,在某些特殊情况下仍然会被“截断”,这 ...
- C语言关于利用sscanf实现字符串相加减
#include<stdio.h>#include<string.h>void main(){ int a; int b; char str1[10] = "9999 ...
随机推荐
- 报错:Cause: java.sql.SQLSyntaxErrorException: ORA-00936: 缺失表达式
错误原因:
- Spring事务专题(五)聊聊Spring事务到底是如何实现的
前言 本专题大纲: 本文为本专题倒数第二篇文章. 在上篇文章中我们一起学习了Spring中的事务抽象机制以及动手模拟了一下Spring中的事务管理机制,那么本文我们就通过源码来分析一下Spring中的 ...
- 性能分析(7)- 未利用系统缓存导致 I/O 缓慢案例
性能分析小案例系列,可以通过下面链接查看哦 https://www.cnblogs.com/poloyy/category/1814570.html 前提 前面有学到 Buffer 和 Cache 的 ...
- Go 切片的一种有趣内存泄漏方式
今天我在看 Prashant Varanasi 的 Go 发布会演讲:使用火焰图进行生产分析(Analyzing production using Flamegraphs),在演讲开始的第 28 分钟 ...
- 原生js实现 vue的数据双向绑定
原生js实现一个简单的vue的数据双向绑定 vue是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时 ...
- MYSQL语法(一)
数据表准备: CREATE TABLE student3 ( id int, name varchar(20), age int, sex varchar(5), address varchar(10 ...
- Robust and Communication-Efficient Federated Learning from Non-IID Data
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! 以下是对本文关键部分的摘抄翻译,详情请参见原文. arXiv:1903.02891v1 [cs.LG] 7 Mar 2019 Abstra ...
- tp6 不能使用vendor
从thinkphp 5.1.x后vendor的使用方法发生变化,文档又没有详细说明.官方真的太坑了! 在thinkPHP 5.1.X后新版取消了Loader::import方法以及import和ven ...
- 目标追踪(Object Tracking)概念的简要介绍
现在我们有一个视频流,可以拆解出 N 个帧出来,这时候初始帧/某一帧中出现了一个我们感兴趣目标,我们希望在后续帧中对这个目标进行追踪,这时候就需要 CV 中的目标追踪: 目标追踪的效果如下: 虽然效果 ...
- Kubernetes K8S之资源控制器StatefulSets详解
Kubernetes的资源控制器StatefulSet详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...