前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >字符串系列一>字符串相乘

字符串系列一>字符串相乘

作者头像
用户11305962
发布于 2025-05-11 12:48:37
发布于 2025-05-11 12:48:37
4900
代码可运行
举报
文章被收录于专栏:学习学习
运行总次数:0
代码可运行

题目:

链接: link

这里是引用
这里是引用

解析:

1.无进位相乘相加:

这里是引用
这里是引用

2.处理前导0和进位:

这里是引用
这里是引用

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    public String multiply(String num1, String num2) {
        //1.无进相乘后相加。2.处理进位
        char[] s1 = new StringBuffer(num1).reverse().toString().toCharArray();
        char[] s2 = new StringBuffer(num2).reverse().toString().toCharArray();
        int n = s1.length;
        int m = s2.length;

        int[] tmp = new int[m+n-1];

        for(int i = 0; i < n; i++)
            for(int j = 0; j < m; j++)
                tmp[i+j] += (s1[i]-'0') * (s2[j]-'0');

        //相加
        StringBuffer ret = new StringBuffer();
        int cur = 0,t = 0;
        while(cur < m+n-1 || t != 0){
            if(cur < m+n-1) t += tmp[cur++]; 
            ret.append((char)((char)t % 10 + '0'));
            t /= 10;//进位
        }

        //2.处理前导0: (注意算出来是逆序的)
        while(ret.length() > 1 && ret.charAt(ret.length() - 1) == '0'){
            ret.deleteCharAt((ret.length()-1));
        }

        return ret.reverse().toString(); 
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
算法思想总结:字符串
思路1:两两比较 时间复杂度mn 实现findcomon返回两两比较后的公共前缀
小陈在拼命
2024/07/16
1000
算法思想总结:字符串
【哈希表与字符串的算法之路:思路与实现】—— LeetCode
这题的思路很简单,在读完题目之后,便可以想到暴力枚举,直接遍历整个数组两遍即可,但是时间复杂度高,下面是运行之后的结果
用户11286421
2025/03/15
920
【哈希表与字符串的算法之路:思路与实现】—— LeetCode
【算法】字符串算法技巧系列
String a = “abcdefg” char[] a1= a.toCharArray()
三三是该溜子
2025/01/13
1490
【算法】字符串算法技巧系列
Go实现字符串相乘无溢出最详细解释
今天在leecode看到了字符串相乘的题,拿来做一下,要做到匹配任意两个数字字符串还是有一定的难度的,在网上看了很多关于Go语言如何解决的,都不全,因此在这里我自己写了一个全面的没有bug的代码逻辑。亲测已经成功。
陌无崖
2020/07/27
9490
Go实现字符串相乘无溢出最详细解释
48days强训——day6
示例1 输入: [9,3,7],[6,3] 返回值: {1,0,0,0} 说明: 如题面解释 示例2 输入: [0],[6,3] 返回值: {6,3} 备注: 1≤n,m≤1061≤n,m≤106 0≤ai,bi≤90≤ai​,bi​≤9
秋邱
2025/03/29
450
48days强训——day6
【C++经典例题】基于字符串实现大数相乘问题
在实际编程中,我们经常会遇到需要处理大整数的情况。由于编程语言中内置整数类型(如 int、long 等)有其表示范围的限制,当需要处理的整数超出这些范围时,就不能直接使用内置类型进行计算。
倔强的石头_
2025/04/15
1350
【C++经典例题】基于字符串实现大数相乘问题
leetcode-43. 字符串相乘
  这道题的思路是让一个字符串每个字符与另一个字符串的每一个字符相乘,该进位就进位,该补 0 就补 0,每一次相乘后将结果相加,加到最终就是相乘的结果。   若两个字符串任一为 0,则相乘结果就是 0,直接返回 0 即可。定义一个储存结果集的变量,按照题目要求是字符串,分别求出两个字符串的长度,对 num2 从右边开始遍历,因为右边是低位,定义一个可拼接的 StringBuffer 类型的变量,定义一个储存进位值的变量,i 向左移动是向高位移动,移动几位就要补几个零,读取每一个字符与 ‘0’ 作差得到整形的结果,这是因为 ASCII 码值的字符 ‘0’~‘9’ 是紧挨着的。 同样的,对 num1 从低位进行遍历,先获取字符对应的整形值,两整形相乘加上上一个进位,将结果对 10 求余,得出个位的值,十位的当进位处理,并将结果除以 10 取整,相当于只获取了十位的值,最后的进位是当新的一位处理,直接拼接即可,以上各种拼接后,数值大的在右边,而现实的数,数值大的在右边,所以需要进行一次反转,调用字符串相加的算法得出结果后加入结果集,最后返回最终结果集即可。   字符串相加的算法:思路是将其每个字符转换成整型相加得出结果再转换成字符串。首先获取传进来的两个字符串的长度,且定义一个保存进位的 add 变量,定义结果集,只要以上三个变量不为任一一个不为 0 都能进入循环,只要 num1 或者 num2 的长度不为 0 则进行取值。这里的 num1.charAt(i) - '0' 主要是利用字符 ‘0’ 到 ‘9’ 的 ASCII 码值是连续的,让其作差即可得到字符的本身的整型值。   取完值,两字符串相加再加上上一步的进位,对结果求余作为本次运算的结果,再对结果除以 10 获得进位的值,同步维护两个指针,最后要记得将答案反转一下,因为拼接字符串是从左到右拼接的,但是我们的数是从又到左数值越大的,返回最终答案,记得 toString 变成 String 类型。
灰太狼学Java
2022/06/17
3780
leetcode-43. 字符串相乘
​LeetCode刷题实战43:字符串相乘
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
4580
​LeetCode刷题实战43:字符串相乘
【算法】字符串
从第一个字符串开始两两比较,把比较相同的字符部分更新到一个存放目前相同字符的ret中,然后把ret继续向后面的字符串比较,继续更新ret就行。得注意一下,如果在比较中长度超过了那两个字符中叫小的一个,那么就这组比较就结束,换下一组来继续比较。
zxctscl
2024/04/18
1480
【算法】字符串
链表以及字符串数据求和及乘积问题
本篇文章分为三个部分也就是三道题来对一系列大数求和积问题做一下解答已经总结,这里正如题目所说的链表,字符串等,这些也不过是一个形式,其实可以归为一类,因此这里我们要知道真正的侧重点是在于如何去求和以及乘积? 这里也就是我们不能盲目的直接相加啊,相乘啊去求,因此可以把加以及乘的具体步骤模拟一下,最后得到最后答案,说白了也就是我们要一位一位来,而不是‘’一口气‘’!
羑悻的小杀马特.
2025/01/23
570
链表以及字符串数据求和及乘积问题
【Day24】 LeetCode算法题 (注释详细+解题思路)[43. 字符串相乘 ] [1800. 最大升序子数组和]
解题思路: 我们需要获得两个字符串表示的正整数num1和num2的乘积,而且记过依旧以字符串形式输出。
.29.
2022/11/15
3430
【Day24】 LeetCode算法题 (注释详细+解题思路)[43. 字符串相乘 ] [1800. 最大升序子数组和]
【字符串】二进制求和 && 字符串相乘
​ 我们之前做过类似的求和问题,其实都是一样的,只不过这道题变成了字符串形式罢了,思路都还是一样的,只不过现在变成了逢二进一!
利刃大大
2025/02/28
660
【字符串】二进制求和 && 字符串相乘
【OJ】string类刷题
题目给的是到2k就翻转前k个,那么循环的时候直接跳到2k处就行for (int i = 0; i < n; i += 2 * k) 。 这里用 reverse翻转的时候区间选择与k有关,以例1为例:发现第一个翻转区间是[0,2),也就从i=0到i+k,得注意区间是左闭右开的;第二个翻转区间是[4,6),也就是i=4到n, reverse的结束就得取i+k和n中小的那一个。将区间写出来就是s.begin() + i, s.begin() + min(i + k, n)。
zxctscl
2024/03/21
720
【OJ】string类刷题
【算法】栈
用完StringBuffer后记得转换成String类型才能使用equals()方法
三三是该溜子
2024/12/30
400
【算法】栈
19. 删除链表的倒数第 N 个结点 & 43. 字符串相乘
本题适合使用快慢指针求解。首先声明一个哨兵节点,作为链表的新头部。最终返回哨兵节点的next指向,就是链表的头节点。
chuckQu
2022/08/19
2290
字符串相乘
链接:https://leetcode-cn.com/problems/multiply-strings
木又AI帮
2020/07/07
6770
字符串系列一>二进制求和
用户11305962
2025/04/21
380
字符串系列一>二进制求和
【算法千题案例】每日LeetCode打卡——75.字符串相加
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
呆呆敲代码的小Y
2021/11/15
2710
POJ 刷题系列:1503 Integer Inquiry
用户1147447
2018/01/02
5210
POJ 刷题系列:1503 Integer Inquiry
【算法题解】 Day15 栈
给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。
sidiot
2023/08/26
1760
【算法题解】 Day15 栈
相关推荐
算法思想总结:字符串
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验