今天继续“字符串”标签,力扣第43题,题目难度“中等。是一道十分有意思的题目,我们来看一下:
目的是将两个表示为了字符串的数字,进行相乘,然后将结果还作为字符串进行输出。
这个题目里面我们要注意的是:
这个表示数字的字符串或者结果,可能已经超过了常规 int 型能够表示的范围,所以不能够使用直接转化的思路。(同时这一点在说明中也提到了)
要想解决这个题目,我们可以参考小学时候学到的“竖式”方法,使用乘法的最原始算法来计算这个题目。
要进行竖式计算,我们需要使用第二行的数字,逐位与第一行的数字进行相乘,最后将中间的结果依次相加。
为了减少循环次数,一般我们是将短的序列放置在下层。
要实现这个算法,我们可以通过这样的代码实现:
public
首先仍然是将特殊情况,即有零存在的情况排除。然后计算两个字符串的长度,为了方式计算过程中出现位数不够的情况,我们取 len = len1+len2来作为暂存按位计算获得的数组的长度值。
然后,按照之前说的,为了减少循环的复杂度区分长短字符串进行处理(如果不区分,仍然可以获得正确结果)。代码中②。
进入按位相乘的方法后,暂时不考虑进位的问题,将每一位的相乘结果直接保存在相关的位置上。这里需要注意⑥的位置,思考一下竖式相乘中得移位,你就会发现这样做的含义了。
在按位计算完成后,回到主函数,再次回来考虑进位的问题。即代码中的③的位置。
最后,由于结果要求是字符串,最后将结果保存为字符串来返回。
今天的算法就是这样。
本系列主要是为了记录,也欢迎大家支出问题,或者来搭伴共同学习。欢迎大家评论点赞关注!
王进林:菜鸡刷LeetCode系列记录24 寻找字符串zhuanlan.zhihu.com下一篇:
王进林:菜鸡刷LeetCode系列记录26 字母异位词zhuanlan.zhihu.com今天的配图为“贝加尔湖”,图片来自网络,侵删。