字符串相加

题目描述
给定两个字符串形式的非负整数 num1 和 num2 ,计算它们的和。
提示:
- num1 和 num2 的长度都小于 5100
- num1 和 num2 都只包含数字 0-9
- num1 和 num2 都不包含任何前导零
- 你不能使用任何內建 BigInteger 库,也不能直接将输入的字符串转换为整数形式
题解
我们只需要对两个大整数模拟「竖式加法」的过程。竖式加法就是我们平常学习生活中常用地对两个整数相加的方法,回想一下我们在纸上对两个整数相加的操作,是不是如下图将相同数位对齐,从低到高逐位相加,如果当前位和超过 10,则向高位进一位?因此我们只要将这个过程用代码写出来即可。我们使用两个变量分别指向两个数的末尾,进行加法操作,同时使用 carry 保存进位,若两个字符串不一样长,我们两个字符串遍历完成后,要继续遍历未计算的字符串,最后,别忘了,如果进位是 1 的话,要把进位加到最终的结果中。
折叠代码块JAVA
复制代码
1 | public String addStrings(String num1, String num2) { |
这里,我们其实不需要这么长的代码,判断最后哪个字符串更长,针对短的字符串,我们进行补 0 操作即可。也不需要判断是否有进位,最后还要记得加上去。我们可以简化代码如下。
折叠代码块JAVA
复制代码
1 | public String addStrings(String num1, String num2) { |
复杂度分析
- 时间复杂度:Ο(max(m, n)),其中 m 和 n 分别是两个字符串的长度。竖式加法的次数取决于较大数的位数。
- 空间复杂度:O(n)。除答案外我们只需要常数空间存放若干的变量。但是解法中使用到了 StringBuilder,空间复杂度为 O(n)。
来源
文章标题:字符串相加
文章作者:cylong
文章链接:https://0skyu.cn/posts/53ac.html
有问题或者建议欢迎在下方评论。欢迎转载、引用,但希望标明出处,感激不尽(●’◡’●)
- 本文标题:字符串相加
- 创建时间:2020-08-03 23:35:34
- 本文链接:https://netlify.076666.xyz/posts/53ac
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
复制版权信息