1. 程式人生 > >Add Strings大整數加法

Add Strings大整數加法

異常 src 數字 hid 英文 ive ans char 字符

[抄題]:

以字符串的形式給出兩個非負整數 num1num2,返回 num1num2 的和。 比如一個50位+一個100位。

給定 num1 = "123",num2 = "45"
返回 "168"

[暴力解法]:

時間分析:

空間分析:

[思維問題]:

[一句話思路]:

[輸入量]:空: 正常情況:特大:特小:程序裏處理到的特殊情況:異常情況(不合法不合理的輸入):

[畫圖]:

[一刷]:

  1. sum求和或者循環退出的條件都是i j >= 0,因為是從後往前做減法的,二者中只要有一個數不為0就要繼續操作,因此為或。第一次見。位數-1直到沒有為止。不熟悉其思想。
  2. 字母 - 字母‘0‘
    = 原本的數字,以前都沒有理解

[二刷]:

[三刷]:

[四刷]:

[五刷]:

[五分鐘肉眼debug的結果]:

[總結]:

新加的位數應該放在前面而不是後面,定式思維了

[復雜度]:Time complexity: O(n) Space complexity: O(1)

[英文數據結構或算法,為什麽不用別的數據結構或算法]:

  1. 一句分號結束的話只能聲明一個數據類型int, 不能兩個(一個分號一個int

int m;

int n;可以

int m, n;可以

int m , int n;一句分號結束的話聲明了2個數據類型int,不行

[其他解法]:

[Follow Up]:

[LC給出的題目變變變]:

2. Add Two Numbers反向加數:也是數字遊戲

[代碼風格] :

技術分享圖片
public class Solution {
    /**
     * @param num1: a non-negative integers
     * @param num2: a non-negative integers
     * @return: return sum of num1 and num2
     */
    public String addStrings(String num1, String num2) {
        String ans 
= ""; int carry = 0;// i or j//? for (int i = num1.length() - 1, j = num2.length() - 1; i >= 0 || j >= 0; i--, j--) { int sum = carry; sum += (i >= 0) ? num1.charAt(i) - ‘0‘: 0; sum += (j >= 0) ? num2.charAt(j) - ‘0‘: 0; ans = sum % 10 + ans; carry = sum / 10; } if (carry != 0) { ans = carry + ans; } return ans; } }
View Code

Add Strings大整數加法