Leetcode之415-字符串相加(Add Strings)

算法题

题干

给定两个字符串形式的非负整数num1和num2, 计算它们的和。

说明

  1. num1和num2的长度都小于5100。
  2. num1和num2都只包含数字0-9。
  3. num1和num2都不包含任何前导零。
  4. 你不能使用任何內建BigInteger库, 也不能直接将输入的字符串转换为整数形式。

Java代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public String addStrings(String num1, String num2) {
final int oneLen = num1.length(), twoLen = num2.length();
int oneCursor = oneLen - 1, twoCursor = twoLen - 1;
int carry = 0;
StringBuilder data = new StringBuilder(Math.max(oneLen, twoLen) + 1);
while (oneCursor >= 0 || twoCursor >= 0) {
int val1 = oneCursor >= 0 ? num1.charAt(oneCursor--) - '0' : 0;
int val2 = twoCursor >= 0 ? num2.charAt(twoCursor--) - '0' : 0;
data.append((val1 + val2 + carry) % 10);
carry = (val1 + val2 + carry) / 10;
}
if (carry != 0) {
data.append(carry);
}
return data.reverse().toString().trim();
}

总结

  1. 题太简单, 提交直接通过。
  2. 二进制求和太相似。
  3. 这种类似的题目, 可以将进制数通过参数进行传递, 不管是几进制求和, 都没问题, 代码可参考如下。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public String addStrings(String num1, String num2, int radix) {
    final int oneLen = num1.length(), twoLen = num2.length();
    int oneCursor = oneLen - 1, twoCursor = twoLen - 1;
    int carry = 0;
    StringBuilder data = new StringBuilder(Math.max(oneLen, twoLen) + 1);
    while (oneCursor >= 0 || twoCursor >= 0) {
    int val1 = oneCursor >= 0 ? num1.charAt(oneCursor--) - '0' : 0;
    int val2 = twoCursor >= 0 ? num2.charAt(twoCursor--) - '0' : 0;
    data.append((val1 + val2 + carry) % radix);
    carry = (val1 + val2 + carry) / radix;
    }
    if (carry != 0) {
    data.append(carry);
    }
    return data.reverse().toString().trim();
    }
如果有任何错误或疑问, 欢迎小伙伴们评论区留言^-^
( 完 )

欢迎各位看官关注

麻辣烫,走起
0%