美文网首页
2020-07-03 2. Add Two Numbers Me

2020-07-03 2. Add Two Numbers Me

作者: 苦庭 | 来源:发表于2020-07-07 06:10 被阅读0次

https://leetcode.com/problems/add-two-numbers/

My answer / AC

/**
 * 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) {
    if(!l1 || !l2) return null;
    let res = addStr(getNum(l1), getNum(l2));
    
    console.log(getNum(l1)+","+getNum(l2)+" = "+res);
    res = res.toString().split("");
    let ptr = new ListNode(res.pop());
    let resN = ptr;
    while(res.length>0) {
        ptr.next = new ListNode(res.pop());
        ptr = ptr.next;
    }
    return resN;
};

var getNum = function(node) {
    let str = "";
    while(node.next!=null){
        str += node.val;
        node = node.next;
    }
    str += node.val;
    return str.split("").reverse().join("");
}

var addStr = function(s1, s2) {
    // s1 shorter
    if(s1.length>s2.length){
        let tmp = s1;
        s1 = s2;
        s2 = tmp;
    }
    let res = "";
    let plus1 = 0;
    for(let i=1; i<=s2.length; i++) {
        let n1 = i<=s1.length ? Number(s1[s1.length-i]): 0;
        let n2 = Number(s2[s2.length-i]);
        let t = n1 + n2 + plus1;
        if(t.toString().length>1) {
            plus1 = 1;
        } else {
            plus1 = 0;
        }
        if(i==s2.length) {
            res = t + res;
        } else {
            res = (t%10) + res;
        }
        
       
    }
    
    return res;
}

做是最终做出来了,但是因为循环太多了,sort也大量使用,效率太慢了。。。

Best answer

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
var addTwoNumbers = function(l1, l2) {
    var List = new ListNode(0);
    var head = List;
    var sum = 0;
    var carry = 0;

    while(l1!==null||l2!==null||sum>0){

        if(l1!==null){
            sum = sum + l1.val;
            l1 = l1.next;
        }
        if(l2!==null){
            sum = sum + l2.val;
            l2 = l2.next;
        }
        if(sum>=10){
            carry = 1;
            sum = sum - 10;
        }

        head.next = new ListNode(sum);
        head = head.next;

        sum = carry;
        carry = 0;

    }

    return List.next;
};

Recap

相关文章

网友评论

      本文标题:2020-07-03 2. Add Two Numbers Me

      本文链接:https://www.haomeiwen.com/subject/rqpeqktx.html