面試題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位數)放入數組的一個元素中
實現還未完成,有時間再看看。數組

相關文章
相關標籤/搜索