欢迎来到我的小小世界

Change is a million times less painful than regret

0%

LC412.字符串相加

题目地址(415. 字符串相加)

https://leetcode-cn.com/problems/add-strings/

题目描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

 

示例 1:

输入:num1 = "11", num2 = "123"
输出:"134"


示例 2:

输入:num1 = "456", num2 = "77"
输出:"533"


示例 3:

输入:num1 = "0", num2 = "0"
输出:"0"


 

 

提示:

1 <= num1.length, num2.length <= 104
num1 和num2 都只包含数字 0-9
num1 和num2 都不包含任何前导零

前置知识

  • StringBuilder ASCII值

公司

  • 字节跳动,百度等

思路

  • 利用ASCII码的差值变相的将char转换为int类型的参与加减
  • 进位使用除法进行统计,具体见注释
  • 由于String的不可分割性,所以使用StringBuilder进行每一步数字的添加。

    关键点

代码

  • 语言支持:Java

Java Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

class Solution {
public String addStrings(String num1, String num2) {
StringBuilder str =new StringBuilder();
int sum=0;//用来进行累加操作的
int i=num1.length()-1;
int j=num2.length()-1;
while(i>=0||j>=0||sum>0){
if(i>=0) sum+=num1.charAt(i--)-'0';
//利用ASCII码值的差值变相将char类型转化为int类型进行计算
//i--的执行顺序也是先执行charAt(i)然后再做减法操作
if(j>=0) sum+=num2.charAt(j--)-'0';
str.append(sum%10);//将两个数字加和后的结果只取小于10的部分,因为要考虑进位的问题
sum/=10;//sum除10提取出十位数字也就是进位,如果加和小于10则sum为0,大于10则提取出十位数字
//相当于提取出了进位数字
}
return str.reverse().toString();//因为是倒着添加的,所以最后要倒置一下,然后将StringBuilder转换为String类型
}
}

字符串加法、链表加法以及二进制加法之类的都可以这么写

�的都可以这么写

-------- 本文结束 感谢阅读 --------