【LeetCode】字符串相加 Java 题解
题目描述
给定两个字符串形式的非负整数 num1 和 num2 ,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger),也不能直接将输入的字符串转换为整数形式。
思路分析
今天的算法题目是字符串类型题目。题目要求计算我们 num1 和 num2 的加法,要求不能直接调用库函数,也不能直接将输入的字符串转换为整数形式。分析一下,我们平时计算加法,一般考虑两点,一是进位,一是溢出。这个题目用字符串计算,不用考虑溢出的问题。
为了计算方便,我们首先将 num1, num2 合并成相同的长度,当长度不够的时候,可以直接补 0。当 num1, num2 长度相同之后,我们直接逐位计算,从低位到高位。计算的时候如果使用 num1.charAt(i) 注意需要转换成十进制的数值。那如何转换呢?num1.charAt(i)默认获取的是字符的 ASCII 码。ASCII 码使用指定的 7 位或 8 位二进制数组合来表示 128 或 256 种可能的字符。其中 32~126(共 95 个)是字符(32 是空格),其中 48~57 为 0 到 9 十个阿拉伯数字。我们转换的时候,可以直接使用 num1.charAt(i) - '0',转换成十进制的数字。
十进制的数字计算需要考虑进位的,和我们计算加法是一样的,只需要转换成的字符串的形式即可。在频繁修改字符串的时候,我们一般使用 StringBuilder。 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。可以节省空间,提升计算效率。具体实现代码如下,供参考。
通过代码
总结
这个题目思路比较容易想到,考察的是边界处理和基础的编码能力。上述算法的时间复杂度是 O(n),空间复杂度是 O(n)
坚持算法每日一题,加油!我会继续更新,也欢迎算法爱好者一起交流学习。
版权声明: 本文为 InfoQ 作者【Albert】的原创文章。
原文链接:【http://xie.infoq.cn/article/87665c16455cf250bfd5e2707】。文章转载请联系作者。
评论