前言:
LeetCode中的字符串相加是一道简单题,因为题目只涉及两个整数相加,思路相对简单;最近笔试遇到一道题,是将任意两个非负字符串数字相加,可能是整数也可能是带小数的,而且最后输出要完全符合数字的要求,即数字的整数部分不能以0开头(除非本身等于0),小数部分不能以0结尾。也就是123.321不能是0123.3210这种形式。
下面我们先看看一种简单的情况,也就是两整数相加的情况,如何计算。
LeetCode415 字符串相加
题目:给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
注意:
num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形
思路:
这道题的思路比较简单:按照正常两个数字相加的思路,就是从个位开始相加,各个位置对应相加,同时记录是否有进位,如果有进位的话,则在下个位置相加的时候也要加上进位的1。
Java代码:
这道题比较麻烦的地方就是边界的判断:
public static String IntStringAdd(String s1,String s2) {
//carry是进位
int carry = 0;
//cur是当前位相加后的结果
int cur = 0;
char[] chars1 = s1.toCharArray();
char[] chars2 = s2.toCharArray();
int p1 = chars1.length - 1,p2 = chars2.length - 1;
StringBuilder sb = new StringBuilder();
while (p1 >= 0 && p2 >= 0) {
char c1 = chars1[p1];
char c2 = chars2[p2];
cur = c1 - '0' + c2 - '0' + carry;
//判断是否需要进位
if(cur > 9) {
cur -= 10;
carry = 1;
}else {
carry = 0;