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

前言

个人网站

公众号: 北京程序猿, 网站 : https://yaml.vip

算法题

题干

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

说明

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

Java代码

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. 这种类似的题目, 可以将进制数通过参数进行传递, 不管是几进制求和, 都没问题, 代码可参考如下。
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();
}

本文著作权归作者所有。

商业转载请联系作者获得授权,非商业转载请于文首标明作者姓名,保持文章完整性,并附上出处和文章链接!未按规范转载者,作者保留追究相应责任的权利!

作者:北京程序猿

链接:字符串相加

    原文作者:北京程序猿
    原文地址: https://www.jianshu.com/p/c86de7bc74b5
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞