LeetCode演算法題-Add Strings(Java實現)
阿新 • • 發佈:2019-01-11
這是悅樂書的第223次更新,第236篇原創
01 看題和準備
今天介紹的是LeetCode演算法題中Easy級別的第90題(順位題號是415)。給定兩個非負整數num1和num2表示為字串,返回num1和num2的總和。
注意:
- num1和num2的長度均<5100。
- num1和num2都只包含數字0-9。
- num1和num2都不包含任何前導零。
- 您不能使用任何內建BigInteger庫或直接將輸入轉換為整數。
本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。
02 第一種解法
從後向前依次獲取兩個字串的字元,轉成int型別,然後做加法得到和,利用對10取餘將餘數新增進字串的第一位,然後需要計算進位,直接將和除以10,就是可能存在的進位。
在迴圈的判斷條件中,還需要判斷進位是否等於1,因為有可能最高位會存在進位,不然會存在誤差。
兩個字串的長度不能保證相等,所以索引從後往前遞減時,兩索引大於等於0是或的關係。
在通過索引取對應位置的字元時,也要判斷是否大於等於0,不滿足就取預設值0。
public String addStrings(String num1, String num2) { int len = num1.length()-1; int len2 = num2.length()-1; int count = 0; StringBuilder sb = new StringBuilder(); for (int i=len, j=len2; i>=0 || j>=0 || count == 1; i--,j--) { int n = i >= 0 ? num1.charAt(i)-'0' : 0; int n2 = j >= 0 ? num2.charAt(j)-'0' : 0; int sum = n + n2 + count; sb.insert(0, sum%10); count = sum/10; } return sb.toString(); }
03 第二種解法
和第一種解法的思路一樣,只是將for迴圈換成了while迴圈,沒有始終在第一位插入,而是最後通過反轉完成。
public String addStrings2(String num1, String num2) { int i = num1.length()-1; int j = num2.length()-1; int carry = 0; StringBuilder sb = new StringBuilder(); while (i>=0 || j>=0 || carry == 1) { int n = i >= 0 ? num1.charAt(i)-'0' : 0; int n2 = j >= 0 ? num2.charAt(j)-'0' : 0; int sum = n + n2 + carry; sb.append(sum%10); carry = sum/10; i--; j--; } return sb.reverse().toString(); }
04 小結
演算法專題目前已連續日更超過兩個月,演算法題文章90+篇,公眾號對話方塊回覆【資料結構與演算法】、【演算法】、【資料結構】中的任一關鍵詞,獲取系列文章合集。
以上就是全部內容,如果大家有什麼好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支援!