Add Strings大整數加法
阿新 • • 發佈:2018-02-23
異常 src 數字 hid 英文 ive ans char 字符 給定 num1 =
[抄題]:
以字符串的形式給出兩個非負整數 num1
和 num2
,返回 num1
和 num2
的和。 比如一個50位+一個100位。
給定 num1 = "123"
,num2 = "45"
返回 "168"
[暴力解法]:
時間分析:
空間分析:
[思維問題]:
[一句話思路]:
[輸入量]:空: 正常情況:特大:特小:程序裏處理到的特殊情況:異常情況(不合法不合理的輸入):
[畫圖]:
[一刷]:
- sum求和或者循環退出的條件都是i j >= 0,因為是從後往前做減法的,二者中只要有一個數不為0就要繼續操作,因此為或。第一次見。位數-1直到沒有為止。不熟悉其思想。
- 字母 - 字母‘0‘
[二刷]:
[三刷]:
[四刷]:
[五刷]:
[五分鐘肉眼debug的結果]:
[總結]:
新加的位數應該放在前面而不是後面,定式思維了
[復雜度]:Time complexity: O(n) Space complexity: O(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 ansView Code= ""; 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; } }
Add Strings大整數加法