Add String
思路一: 模拟加法运算,字符串前面填零

public String addStrings(String num1, String num2) {
    int max = Math.max(num1.length(), num2.length());
    num1 = pad(num1, max);
    num2 = pad(num2, max);

    int p = 0;
    StringBuilder result = new StringBuilder();
    for (int length = num1.length() - 1; length >= 0; length--) {
        int sum = Integer.parseInt(Character.toString(num1.charAt(length))) +
                Integer.parseInt(Character.toString(num2.charAt(length))) + p;
        if (sum >= 10) {
            p = 1;
            result.insert(0, sum % 10);
        } else {
            p = 0;
            result.insert(0, sum);
        }
    }
    if (p == 1) {
        result.insert(0, '1');
    }

    return result.toString();
}

public static String pad(String str, int len) {
    if (str.length() >= len) return str;

    StringBuilder strBuilder = new StringBuilder(str);
    for (int i = 0; i < (len - str.length()); i++) {
        strBuilder.insert(0, '0');
    }
    return strBuilder.toString();
}

思路二: 做法和思路一一样,细节优化:双指针,指针指向字符串尾部,另外 ‘1’-‘0’ 可以直接算 char 类型 ‘1’ 对应的 int 值

public String addStrings(String num1, String num2) {
    StringBuilder res = new StringBuilder("");
    int i = num1.length() - 1, j = num2.length() - 1, carry = 0;
    while(i >= 0 || j >= 0){
        int n1 = i >= 0 ? num1.charAt(i) - '0' : 0;
        int n2 = j >= 0 ? num2.charAt(j) - '0' : 0;
        int tmp = n1 + n2 + carry;
        carry = tmp / 10;
        res.append(tmp % 10);
        i--; j--;
    }
    if(carry == 1) res.append(1);
    return res.reverse().toString();
}

原文地址:http://www.cnblogs.com/iyiluo/p/16804873.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性