给定两个字符串形式的非负整数 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 都不包含任何前导零
来源:力扣(LeetCode)
链接:力扣
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
package cn.fansunion.leecode.string;
/**
* @author wen.lei@brgroup.com
*
* 2022-1-13
*/
public class AddStrings {
//12345->54321
//6789-> 9876
public String addStrings(String num1, String num2) {
//特殊情况
if(num1==null || num1.length()==0) {
return num2;
}
if(num2==null || num2.length()==0) {
return num1;
}
int num1Length=num1.length();
int num2Length = num2.length();
//最大长度
int maxLength = num1Length>num2Length?num1Length:num2Length;
//逆序
String num3 = reverse(num1);
String num4 = reverse(num2);
//下一个是否有进位的1
int nextLocationNum=0;
StringBuilder sb = new StringBuilder();
for(int index=0;index<maxLength;index++) {
int oneNum=0;
if(index <num3.length()) {
char one=num3.charAt(index);
oneNum=Character.getNumericValue(one);
}
int twoNum=0;
if(index <num4.length()) {
char two=num4.charAt(index);
twoNum=Character.getNumericValue(two);
}
//相加求和
int currentNumSum=oneNum+twoNum+nextLocationNum;
//取模
int currentNum=currentNumSum%10;
if(currentNumSum>=10) {
nextLocationNum=1;
}else {
nextLocationNum=0;
}
sb.append(currentNum);
}
//最后1个进位
if(nextLocationNum==1) {
sb.append(nextLocationNum);
}
String sum= sb.toString();
//逆序返回
return reverse(sum);
}
/**
* 对一个字符串逆序
* @param num
* @return
*/
private String reverse(String num) {
StringBuilder sb = new StringBuilder();
for(int index=num.length()-1;index>=0;index--) {
sb.append(num.charAt(index));
}
return sb.toString();
}
public String addStringsByInt(String num1, String num2) {
int num1Int=Integer.parseInt(num1);
int num2Int=Integer.parseInt(num2);
return (num1Int+num2Int)+"";
}
}
package test.leecode.string;
import org.junit.Assert;
import org.junit.Test;
import cn.fansunion.leecode.string.AddStrings;
/**
* @author wen.lei@brgroup.com
*
* 2022-1-13
*/
public class AddStringsTest {
@Test
public void test() {
AddStrings as = new AddStrings();
String sum1=as.addStrings("12345", "6789");
String expected1=(12345+6789)+"";
Assert.assertEquals(expected1, sum1);
String sum2=as.addStrings("11", "123");
String expected2=(11+123)+"";
Assert.assertEquals(expected2, sum2);
String sum3=as.addStrings("456", "77");
String expected3=(456+77)+"";
Assert.assertEquals(expected3, sum3);
}
}
————————————————
版权声明:本文为CSDN博主「huoyingfans」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/huoyingfans/article/details/122500762