字符串相加-LeetCode(Java实现)

题目描述:

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

注意:

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

解题思路:

  1. 先把两个字符串反转,然后变成相同长度(在短的字符串后面加 ”0“)。
  2. 从左到右给两个统一字符串上的字符求和(先变成整数,再求和)。创建一个int变量,存放求和后需要进位的数。
  3. 求和后的数字,减去10,然后存放在一个新字符串中。
  4. 反转新字符串,并返回该字符串。

代码实现:

class Solution {
    public String addStrings(String num1, String num2) {
        if (num1 == null || num1.equals("0")) {
            return num2;
        }else if (num2 == null || num2.equals("0")) {
            return num1;
        }
        StringBuffer s1 = new StringBuffer(num1);
        StringBuffer s2 = new StringBuffer(num2);
        s1.reverse();
        s2.reverse();
        if (s1.length() > s2.length()) {
            for (int i = s2.length(); i < s1.length(); i++) {
                s2.append("0");
            }
        }else if (s1.length() < s2.length()) {
            for (int i = s1.length(); i < s2.length(); i++) {
                s1.append("0");
            }
        }
        int flag = 0;
        StringBuffer str = new StringBuffer("");
        for (int i = 0; i < s1.length(); i++) {
            int value1 = s1.charAt(i) - '0';
            int value2 = s2.charAt(i) - '0';
            int value = flag + value1 + value2;
            if (value >= 10) {
                flag = 1;
                value = value - 10;
                str.append(value);
            }else {
                str.append(value);
                flag = 0;
            }
        }
        if (flag != 0) {
            str.append(flag);
        }
        str.reverse();
        return str.toString();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43573824/article/details/88759531
今日推荐