两数相加
链表
/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } */ /** * @param {ListNode} l1 * @param {ListNode} l2 * @return {ListNode} */ var addTwoNumbers = function(l1, l2) { let dummy = new ListNode(0) let res = dummy let p1=l1,p2=l2,curry = 0 while(p1 !== null || p2 !== null || curry != 0){ let sum =curry if(p1 != null){ sum += p1.val p1 =p1.next } if(p2 != null){ sum += p2.val p2 =p2.next } curry = Math.floor(sum/10) dummy.next = new ListNode(sum % 10) dummy = dummy.next } if(curry){ dummy.next = new ListNode(curry) } return res.next };
大数相加
两个字符串
转成数组再操作,记得转成数字
否则'1'+'1'=='11'
const bigAdd = (str1, str2) => { let arr1 = str1.split('').reverse().map(Number); let arr2 = str2.split('').reverse().map(Number); let res = []; let carry = 0; let i = 0; // 迴圈直到兩個陣列都處理完畢且沒有進位為止 while (i < arr1.length || i < arr2.length || carry) { const val1 = i < arr1.length ? arr1[i] : 0; const val2 = i < arr2.length ? arr2[i] : 0; let sum = val1 + val2 + carry; res.push(sum % 10); carry = Math.floor(sum / 10); i++; } return res.reverse().join(''); }; console.log(bigAdd('123', '1234')); // 輸出: "1357" console.log(bigAdd('99', '1')); // 輸出: "100" console.log(bigAdd('999', '999')); // 輸出: "1998"