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;
};
网友评论