力扣(LeetCode)415. 字符串相加

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

注意:

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

java 基础版

class Solution {
    public String addStrings(String num1, String num2) {
        String res = "";
        int s1c = num1.length();
        int s2c = num2.length();
        if(s1c>=s2c) {
            int diff = s1c-s2c;
            String temp = "";
            for(int i=0;i<diff;i++) {
                temp += "0";
            }
            num2 = temp+num2;
            char[] cs1 = num1.toCharArray();
            char[] cs2 = num2.toCharArray();
            int flag=0;
            for(int i = cs1.length-1;i>=0;i--) {
                System.out.println((cs1[i]-48+cs2[i]-48+flag));
                if(flag+cs1[i]-48+cs2[i]-48>=10) {
                    res = (flag+cs1[i]-48+cs2[i]-48-10) + res;
                    flag=1;
                }else {
                    res =  (flag+cs1[i]-48+cs2[i]-48) + res;
                    flag=0;
                }
            }
            if(flag == 1 ) {
                res = 1+res;
            }
        }else {
            int diff = s2c-s1c;
            String temp = "";
            for(int i=0;i<diff;i++) {
                temp += "0";
            }
            num1 = temp+num1;
            char[] cs1 = num1.toCharArray();
            char[] cs2 = num2.toCharArray();
            int flag=0;
            for(int i = cs1.length-1;i>=0;i--) {
                System.out.println((cs1[i]-48+cs2[i]-48+flag));
                if(flag+cs1[i]-48+cs2[i]-48>=10) {
                    res = (flag+cs1[i]-48+cs2[i]-48-10) + res;
                    flag=1;
                }else {
                    res =  (flag+cs1[i]-48+cs2[i]-48) + res;
                    flag=0;
                }
            }
            if(flag == 1 ) {
                res = 1+res;
            }
        }
        return res;
    }
}

java 升级版

字符串加法、链表加法、二进制加法 都可以如此做

class Solution {
    public String addStrings(String num1, String num2) {
       StringBuilder build = new StringBuilder();
        int s1c = num1.length()-1;
        int s2c = num2.length()-1;
        int carry = 0; //进位
        while(s1c>=0 || s2c>=0 || carry !=0) {
            if(s1c>=0) {
                carry += num1.charAt(s1c--)-'0';
            }
            if(s2c>=0) {
                carry += num2.charAt(s2c--)-'0';
            }
            build.append(carry%10); //各位数字
            carry /=10; // 进位数字
        }
        
        return build.reverse().toString();
    }
}

运行结果

猜你喜欢

转载自www.cnblogs.com/lick468/p/10671081.html
今日推荐