面试题2:2个正整数字符串的相加,即‘1’+’19’——>’20’(考虑超长字符串相加)

没实现代码,只大体说了下思路,Number.MAX_SAFE_INTEGER最大值是16位,那么将字符串以15位分割,再分别相加,有进位的话就进位,最后再将相加后的字符串拼接。
今天翻到学习算法时记的笔记发现学过,可是忘了,仍是学得不够深刻。
代码以下:算法

function add (a, b) {
    var length = a.length > b.length ? (a.length + 1) : (b.length + 1)
    var arrA = []
    var arrB = []
    var arrR = []
    for (var i = 0; i < length; i++) {
        arrA[i] = a[a.length - 1 - i] == undefined ? 0 : a[a.length - 1 - i]
        arrB[i] = b[b.length - 1 - i] == undefined ? 0 : b[b.length - 1 - i]
        arrR[i] = 0
    }
    console.log(arrA)
    for (var i = 0; i < length; i++) {
        var sum = Number(arrA[i]) + Number(arrB[i]) + arrR[i]
        if (sum > 9) {
            arrR[i] = sum - 10
            arrR[i + 1] = 1
        } else {
            arrR[i] = sum
        }
    }
    console.log(arrR)
    return parseInt(arrR.reverse().join(''))    
}
console.log(add('426709752318', '95481253129'))

优化思路:每15位数(Number.MAX_SAFE_INTEGER是一个16位数)放入数组的一个元素中
实现还未完成,有时间再看看。数组

相关文章
相关标签/搜索