Leetcode——415. Add Strings
阿新 • • 發佈:2019-01-30
題目原址
題目描述
Given two non-negative integers num1 and num2 represented as string, return the sum of num1 and num2.
Note:
- The length of both num1 and num2 is < 5100.
- Both num1 and num2 contains only digits 0-9.
- Both num1 and num2 does not contain any leading zero.
- You must not use any built-in BigInteger library or convert the inputs to integer directly.
解題思路
這個題與之前的67題Add Binary很像,都是傳遞進來的引數是字串,要求將字串相加,然後輸出出來。這裡涉及到的問題就是怎麼對兩個字元進行相加,還有就是相加後的進位為。利用67.Add Binary這個題的解題思路可以將這道題做出來,但是我在dicuss中找到了更加好的解題方法。整體的思路都是一樣的。
- 因為要返回的字串,而且字串中的值是不定時的追加進去的,所以這裡選擇使用SringBuilder。定義兩個變數用來儲存兩個字串的長度,設定一個變數prev,用來儲存如果兩個數相加超過10的進位值
- 通過迴圈對兩個字串進行相加,注意迴圈條件是三個:只要字串num1有字元,字串num2有字元,進位的值非1,就會進入迴圈體
- 下面要獲取兩個字串中的字元,因為要進行加法,所以獲取後要減去’0’字元,這樣獲得的字元就從字元型變為整型。同時要判斷一下,當前的字元陣列是否還有值
- 將獲取到的兩個字元變換的整型相加,注意要加進位變數
- 將求和的結果放入sb中,這裡使用的方法很巧妙,因為最後輸出的結果是有序的,所以考慮使用inset方法,通過給出下標為0,這個方法的意識是,如果該位置沒有元素,則直接插入元素,如果有元素,則將原來的元素向右移動一位,插入新元素。即每次插入的元素都在前面。
- 最後要求改一下進位變數的值。
AC程式碼
class Solution {
public String addStrings(String num1, String num2) {
StringBuilder sb = new StringBuilder();
int len1 = num1.length() - 1;
int len2 = num2.length() - 1;
int prev = 0;
while(len1 >= 0 || len2 >= 0 || prev == 1) {
int a = len1 >= 0 ? (num1.charAt(len1--) - '0') : 0;
int b = len2 >= 0 ? (num2.charAt(len2--) - '0') : 0;
int temp = a + b + prev;
sb.insert(0, temp % 10);
prev = temp / 10;
}
return new String(sb);
}
}