Given two non-negative numbers num1 and num2 represented as string, return the sum of num1 and num2.
Note:
1.The length of both num1 and num2 is < 5100.
2.Both num1 and num2 contains only digits 0-9.
3.Both num1 and num2 does not contain any leading zero.
4.You must not use any built-in BigInteger library or convert the inputs to integer directly.
解法一:Language-Java Time-O(max(num1,num2)) Space-O(1) Run Time-55ms
public class Solution {
public String addStrings(String num1, String num2) {
String res = "";
int count = 0;
int num = 0;
if(num1.length() < num2.length())
{
return addStrings(num2, num1);
}else {
for(int i = num2.length() - 1; i >= 0; i --)
{
if(count == 1)
{
num += 1;
}
num += (num2.charAt(i) - '0') + (num1.charAt(i + num1.length() - num2.length()) - '0');
if(num >= 10)
{
count = 1;
num = num - 10;
}else
{
count = 0;
}
res = String.valueOf(num) + res;
num = 0;
}
for(int i = num1.length() - num2.length() - 1; i >= 0; i --)
{
if(count == 1)
{
num += 1;
}
num += num1.charAt(i) - '0';
if(num >= 10)
{
count = 1;
num = num - 10;
}else
{
count = 0;
}
res = String.valueOf(num) + res;
num = 0;
}
if(count == 1)
{
res = "1" + res;
}
return res;
}
}
}
解法二:Language-Java Time-O(max(num1,num2)+(max(num1,num2)-min(num1,num2))) Space-O(num1 + num2) Run Time-26ms
public class Solution {
public String addStrings(String num1, String num2) {
if(num1.length() > num2.length())
{
return addStrings(num2, num1);
}else
{
int count = 0;
StringBuffer res = new StringBuffer();
StringBuffer ns1 = new StringBuffer(num1);
StringBuffer ns2 = new StringBuffer(num2);
//反转字符串
ns1.reverse();
ns2.reverse();
int len = ns2.length() - ns1.length();
for(int k = 0; k < len; k ++)
{
ns1.append('0');
}
for(int i = 0; i < ns2.length(); i ++)
{
int num = 0;
if(count == 1)
{
num += 1;
}
num += (ns1.charAt(i) - '0') + (ns2.charAt(i) - '0');
if(num >= 10)
{
res.append(num - 10);
count = 1;
}else
{
res.append(num);
count = 0;
}
}
if(count == 1)
{
res.append("1");
}
return res.reverse().toString();
}
}
}