两数相加

链表

/**
 * 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"

全部评论

相关推荐

SQL题写了几十行代码,艰难拿下
投递淘天集团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务