415. Add Strings--两个用字符串表示的数字相加
2017-05-26 20:08
435 查看
Given two non-negative integers
as string, return the sum of
Note:
The length of both
< 5100.
Both
only digits
Both
not contain any leading zero.
You must not use any built-in BigInteger library or convert the inputs to integer directly.
这道题是让两个用string表示的数字相加,最后返回的也是和的string形式,这里要注意note里的第四条,不让用BigInteger或者直接把输入转换成整数,也就是用不了Integer.parseInt(num1, 10)这个函数直接把num1转换成10进制的数,所以只能逐位地将两个数字相加,需要考虑两个数字的位数不同,以及相加的过程中进位的问题,这里用了plus1表示是否进位,先为false,如果进行逐位相加的时候和大于等于10,则进位,即将plus1标志位设为true。另外,用了StringBuilder新建一个string,为什么用StringBuilder?因为单从执行速度上,Stringbuilder>StringBuffer>string,string适合较少的数据,当要操作的数据量大的时候,需要用另外两个,StringBuffer适合于多线程,StringBuilder适合用于单线程,在多线程时,JVM不能保证StringBuilder的操作是安全的。所以可以判断在这道题中适合用StringBuilder。
代码如下:
if(num1.length()==0){return num2;}
else if (num2.length()==0){return num1;}
//设置一个进位标志
boolean plus1 = false;
int i = num1.length()-1;
int j = num2.length()-1;
StringBuilder builder = new StringBuilder();
while(i>=0||j>=0){
int p1 = i >= 0 ? num1.charAt(i--)-'0':0;
int p2 = j >= 0 ? num2.charAt(j--)-'0':0;
int sum = p1+p2+(plus1?1:0);
if(sum>=10){
builder.insert(0, Integer.toString(sum-10));
plus1 = true;
}
else {
builder.insert(0, Integer.toString(sum));
plus1 = false;
}
//i--;
//j--;
}
if(plus1){builder.insert(0, "1");}
return builder.toString();
num1and
num2represented
as string, return the sum of
num1and
num2.
Note:
The length of both
num1and
num2is
< 5100.
Both
num1and
num2contains
only digits
0-9.
Both
num1and
num2does
not contain any leading zero.
You must not use any built-in BigInteger library or convert the inputs to integer directly.
这道题是让两个用string表示的数字相加,最后返回的也是和的string形式,这里要注意note里的第四条,不让用BigInteger或者直接把输入转换成整数,也就是用不了Integer.parseInt(num1, 10)这个函数直接把num1转换成10进制的数,所以只能逐位地将两个数字相加,需要考虑两个数字的位数不同,以及相加的过程中进位的问题,这里用了plus1表示是否进位,先为false,如果进行逐位相加的时候和大于等于10,则进位,即将plus1标志位设为true。另外,用了StringBuilder新建一个string,为什么用StringBuilder?因为单从执行速度上,Stringbuilder>StringBuffer>string,string适合较少的数据,当要操作的数据量大的时候,需要用另外两个,StringBuffer适合于多线程,StringBuilder适合用于单线程,在多线程时,JVM不能保证StringBuilder的操作是安全的。所以可以判断在这道题中适合用StringBuilder。
代码如下:
if(num1.length()==0){return num2;}
else if (num2.length()==0){return num1;}
//设置一个进位标志
boolean plus1 = false;
int i = num1.length()-1;
int j = num2.length()-1;
StringBuilder builder = new StringBuilder();
while(i>=0||j>=0){
int p1 = i >= 0 ? num1.charAt(i--)-'0':0;
int p2 = j >= 0 ? num2.charAt(j--)-'0':0;
int sum = p1+p2+(plus1?1:0);
if(sum>=10){
builder.insert(0, Integer.toString(sum-10));
plus1 = true;
}
else {
builder.insert(0, Integer.toString(sum));
plus1 = false;
}
//i--;
//j--;
}
if(plus1){builder.insert(0, "1");}
return builder.toString();
相关文章推荐
- 415. Add Strings (计算由两个字符串表示的数字相加之和)
- [LeetCode]415. Add Strings(计算两个字符串表示的数字的和)
- 面试题--两个字符串数字相加,不能用jdk自带的类型转换方法
- 大数乘法。给定两个数字表示为字符串,返回乘数的数字作为一个字符串。
- java两个字符串数字相加
- LeetCode425——Add Strings(两个字符串中的数字相加(十进制或二进制),输出字符串形式的结果)
- 面试题七 C/C++ 两个字符串由数字组成的相加,最大不超过32bit整形的系统函数--程序员面试题
- 两个数字字符串相加生成新的字符串
- 每天一道LeetCode-----将用数组表示的整数加一,两个用字符串表示的(二进制)数相加
- JAVA 两个大字符串数字相加
- leetcode_415(两个数字字符串相加,模拟大数相加)
- SQL字符串中取字母及数字的两个自定义函数(收藏)
- 两个数字字符串相乘
- 大数相加(两个数相加结果大于int能表示的范围时怎么办?)
- 两个字符串相加用指针实现
- as3计算字符串和数字相加时的悲催问题
- Javascript 笔记 字符串与数字相加
- [题目]在字符串中将数字相加
- 匹配一个字符串,它由0、1、2组成,并且中间没有两个相邻的数字是相同的(比如,匹配1232101210321020,而不匹配1100123)
- 读入N, S两个自然数(0<=S,N<=9),打印相应的数字三角形(其中,S表示确定三角形的第一个数,N表示三角形的行数)。(提示:左右对齐可使用cout<<left、cout<<right)