String字符串表示的數(shù)字相加(LeetCode415.字符串相加)

題目

給定兩個字符串形式的非負(fù)整數(shù) num1 和num2 ,計算它們的和。
例如:"235" + "645" 結(jié)果為:"880","36" + "47" 結(jié)果為:"83"

解題

按照筆算加法的方式,相同數(shù)位對齊,依次進行加法,產(chǎn)生進位向前一位進位。如圖:


筆算加法

從字符串的最高的下標(biāo)對齊(字符串"abc",'a'的下標(biāo)為0,'c'的下標(biāo)是2,也就是兩個字符串右對齊),依次向前遍歷兩個字符串到下標(biāo)0的位置,如果其中一個字符串提前到下標(biāo)0,那么之后遍歷數(shù)位上都是0(相當(dāng)于位數(shù)少的字符串高位用0補齊)。

代碼

public String addStrings(String num1, String num2) {
    if(null == num1){
        return null;
    }
    if(null == num2){
        return null;
    }
    int i = 0;
    int carry = 0;
    //StringBuilder模擬棧結(jié)構(gòu)把地位的結(jié)果放入棧底部,高位結(jié)果放入棧頂部
    StringBuilder sb = new StringBuilder();
    while(i < num1.length() || i < num2.length()){
        //從高下標(biāo)開始,向0移動
        int m = i < num1.length() ? (num1.charAt(num1.length() - 1 - i) - '0') : 0;
        int n = i < num2.length() ? (num2.charAt(num2.length() - 1- i) - '0') : 0;
        //產(chǎn)生的進位值,初始化0
        int sum = m + n + carry;
        //保存結(jié)果,更新進位值
        sb.append(String.valueOf(sum % 10));
        carry = sum / 10;
        i++;
    }
    //最高位的進位單獨處理
    if(carry > 0){
        sb.append(String.valueOf(carry));
    }
    //翻轉(zhuǎn)StringBuilder獲取結(jié)果
    return sb.reverse().toString();
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容