字符串相加
题目
给定两个字符串形式的非负整数num1 和num2,计算它们的和。
注意:
num1 和num2的长度都小于 5100.
num1 和num2 都只包含数字0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库,也不能直接将输入的字符串转换为整数形式。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
- 要求不实用内置库,且长度很长,因此不能转换为int类型,肯定会超.因此选择创建新的字符串然后返回
代码
class Solution {
public String addStrings(String num1, String num2) {
//给定非负整数,要求不使用内置库,可以分别从队尾遍历相加,同时字符串长度很长,直接相加算sum也不可行
int min = Math.min(num2.length(),num1.length());
StringBuilder sb = new StringBuilder();
boolean carryFlag = false;
for(int i =0;i<min;i++){
int sum = num1.charAt(num1.length()-1-i) + num2.charAt(num2.length()-1-i) - '0'-'0';
if(carryFlag){
sum++;
}
if(sum >= 10){
carryFlag = true;
sb.append(sum%10);
}else{
carryFlag = false;
sb.append(sum);
}
}
String remain = num1.length()-min>0?num1:num2;
for(int i = remain.length()-1-min;i >=0;i--){
int num = remain.charAt(i)-'0';
if(carryFlag){
num++;
}
if(num == 10){
carryFlag = true;
sb.append(0);
}else{
carryFlag = false;
sb.append(num);
}
}
if (carryFlag){
sb.append(1);
}
return sb.reverse().toString();
}
}
网友评论