题目描述:
给定两个字符串形式的非负整数 num
和 num2
,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger
), 也不能直接将输入的字符串转换为整数形式。
示例:
输入:num1 = “11”, num2 = “123”
输出:“134”
我的题解:
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var addStrings = function(num1, num2) {
// 两个指向末尾的指针,add控制进位
let i = num1.length - 1, j = num2.length - 1, add = 0
// 将两个字符串划为数组
const arr1 = num1.split(''), arr2 = num2.split('')
// 新建数组存储结果
const cur = new Array()
while(i >= 0 || j >= 0 || add!= 0) {
const x = i >= 0 ? arr1[i] * 1 : 0
const y = j >= 0 ? arr2[j] * 1 : 0
// 计算结果
const z = x + y + add
// 存入数组
cur.push(z % 10)
// 调整进位
add = z / 10 >= 1 ? 1 : 0
i--
j--
return cur.reverse().join('')
/*
没想明白为什么这么写有个测试用例会报错
* // 定义结果
* let result = 0
* for (let k = 0; k <= cur.length - 1; k++) {
* // 结果为从数组里顺序取数后与1、10、100...相乘后相加
* result += cur[k] * Math.pow(10, k)
* console.log(result);
* }
* return result + ''
*/
};
其他解法:
更牛逼的解法:
总结:
- 字符串相加要熟练运用指针
- 数组方法要熟练