【LeetCode】002. Add Two Numbers

javascript 解法:

var addTwoNumbers = function(l1, l2) {
    var node1,node2;
    var val ,pre = 0;
    var head = true;
    var HEAD ;
    // 確保 node1,與 node2 有值
    for( node1 = l1,node2 = l2; node1.hasOwnProperty("val") || node2.hasOwnProperty("val") || pre ;node1= node1.next || {},node2 = node2.next|| {} ){

        val = ((node1.val || 0)+ ( node2.val || 0) + pre) % 10;
        pre = Math.floor(((node1.val || 0)+ ( node2.val || 0) + pre) / 10);
        // console.log(val,pre)
        // 形成鏈表
        if(head){
            HEAD = new ListNode(val);
            head = false;
            lastNode = HEAD;
            continue;
        }
        lastNode.next = new ListNode(val);
        lastNode = lastNode.next;
    }
    //處理單節點鏈表
    if(head){
        val = ((l1.val || 0)+ ( l2.val || 0) + pre) % 10;
        pre = Math.floor(((node1.val || 0)+ ( node2.val || 0) + pre) / 10);
        HEAD = new ListNode(val);
        if(pre){
            HEAD.next = new ListNode(pre);
        }
    }
    return HEAD;
};

下面的話,都是錯的。是我沒能理解題意。代碼保留,供有需要的人,對比學習。


      這一題的話,本質不難。但我使用的JavaScript有點麻煩。首先,在節點的定義上,原題給的就是一個錯誤的定義,不能使用。修改定義後,發現題目的測試案例又不是用的定義給的,而是用數組代表這個鏈表。這個跟原題意,使用鏈表的解法完全不是同一個難度等級。
      最後,提交問題。本地一直是成功的,但到了提交平臺上,一直返回了undefined ,像是對函數內部進行了異步調用。

數組解法:

var addTwoNumbers = function(l1, l2) {
   var result = [];
   for(var i = 0 ,pre = 0; i<l1.length || i<l2.length || pre; i++){
       result.push( ( (l1[i]||0) + (l2[i]||0) + pre )%10 );
       pre = Math.floor( ( (l1[i]||0) + (l2[i]||0) + pre)/10 );
       if( i>=l1.length-1 && pre ==0){
           return result;
       }
   }
   // return result;
};

鏈表解法: 包含節點定義的修改

function ListNode(val) {
    var aa = {};
    aa.val = val;
    aa.next = null;
    return aa;
}

var addTwoNumbers = function(l1, l2) {
    var node1,node2;
    var val ,pre = 0;
    var head = true;
    var HEAD ;
    // 確保 node1,與 node2 有值
    for( node1 = l1,node2 = l2; node1.next || node2.next || pre ;node1= node1.next || 1,node2 = node2.next|| 1 ){

        val = ((node1.val || 0)+ ( node2.val || 0) + pre) % 10;
        pre = Math.floor(((node1.val || 0)+ ( node2.val || 0) + pre) / 10);
        console.log(val,pre)
        // 形成鏈表
        if(head){
            HEAD = ListNode(val);
            head = false;
            lastNode = HEAD;
            continue;
        }
        lastNode.next = ListNode(val);
        lastNode = lastNode.next;
    }
    return HEAD;
};

鏈表解法測試案例:

var l1 = ListNode(2);
l1.next = ListNode(4)
l1.next.next = ListNode(3)


var l2 = ListNode(5)
l2.next = ListNode(6)
l2.next.next = ListNode(4)

// console.log(addTwoNumbers(l1,l2));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章