[抄题]:
以字符串的形式给出两个非负整数 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 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; } }