415. 字符串相加(java)

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

注意:

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

来源:力扣(LeetCode)
链接:https://dev.lingkou.xyz/problems/add-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
    public String addStrings(String num1, String num2) {
        StringBuilder s = new StringBuilder();
        char[] ch1,ch2;
        if(num1.length() > num2.length()) {
            ch1 = num1.toCharArray();
            ch2 = num2.toCharArray();
        }
        else {
            ch1 = num2.toCharArray();
            ch2 = num1.toCharArray();            
        }
        int n = 0;
        int j = ch1.length-ch2.length;
        for(int i = ch2.length-1; i >= 0; i--){
            int sum = n + CtoInt(ch1[i+j]) + CtoInt(ch2[i]);
            s.append(sum%10);
            n = (sum)/10;
        }
        int i = 0;
        for(i = ch1.length-1-ch2.length; i >=0; i--){
            if(n == 0) break;
            int sum = n + CtoInt(ch1[i]);
            s.append(sum%10);
            n = (sum)/10;                
        }
        for(;i >= 0; i--) {
            s.append(ch1[i]);                
        }
        if(n != 0) s.append(n);
        s.reverse();
        return s.toString();
    }
    public int CtoInt(char c) {
        if(c == '0') return 0;
        else if(c == '1') return 1;
        else if(c == '2') return 2;
        else if(c == '3') return 3;
        else if(c == '4') return 4;
        else if(c == '5') return 5;
        else if(c == '6') return 6;
        else if(c == '7') return 7;
        else if(c == '8') return 8;
        return 9;
    }
}

代码简化后

class Solution {
    public String addStrings(String num1, String num2) {
        StringBuilder s = new StringBuilder();
        char[] ch1 = num1.toCharArray();
        char[] ch2 = num2.toCharArray();
        int carry = 0, i = num1.length()-1, j = num2.length()-1;
        while(i >= 0 || j >= 0 || carry != 0){
            if(i>=0) carry += ch1[i--]-'0';
            if(j>=0) carry += ch2[j--]-'0';
            s.append(carry%10);
            carry /= 10;
        }
        s.reverse();
        return s.toString();
    }
}
发布了136 篇原创文章 · 获赞 19 · 访问量 8037

猜你喜欢

转载自blog.csdn.net/weixin_43306331/article/details/103995745
今日推荐