Leetcode415. 字符串相加
题目:
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
注意:
num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
题解:
使用类似双指针方法
scala代码:
/**
*
* @param num1
* @param num2
* @return
*/
def addStrings(num1: String, num2: String): String = {
val str = new StringBuilder("")
var i = num1.length - 1
var j = num2.length - 1
var carry = 0
while (i >= 0 || j >= 0) {
val n1 = if (i >= 0) {
num1.charAt(i) - '0'
} else {
0
}
val n2 = if (j >= 0) {
num2.charAt(j) - '0'
} else {
0
}
val tmp = n1 + n2 + carry
carry = tmp / 10
str.append(tmp % 10)
i = i - 1
j = j - 1
}
if(carry == 1) str.append(1)
str.reverse.toString()
}
java代码:
public static String addStrings(String s1, String s2) {
int i = s1.length() - 1;
int j = s2.length() - 1;
StringBuffer buffer = new StringBuffer();
int n1, n2;
int carry = 0;
while (i >= 0 || j >= 0) {
if (i >= 0) {
n1 = s1.charAt(i) - '0';
} else {
n1 = 0;
}
if (j >= 0) {
n2 = s2.charAt(j) - '0';
} else {
n2 = 0;
}
int num = n1 + n2 + carry;
carry = num / 10;
int res = num % 10;
buffer.append(res);
i--;
j--;
}
if (carry > 0) buffer.append(carry);
return buffer.reverse().toString();
}