1. 程式人生 > >Leetcode——415. Add Strings

Leetcode——415. Add Strings

題目原址

題目描述

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); } }

感謝