1. 程式人生 > >力扣(LeetCode)415. 字符串相加

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

i++ array class stringbu charat etc bubuko 字符串加法 src

給定兩個字符串形式的非負整數 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();
    }
}

運行結果

技術分享圖片

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