LeetCode 002 Add Two Numbers
2018-01-24 00:00
459 查看
链表 基本操作
c++ 77ms
去掉变量省略循环 60ms
再次省略一些循环,42ms
Python 122 ms
c++ 77ms
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2){ ListNode* head = new ListNode(0); ListNode* p = head; int carry = 0, sum, t; //当两个指针都不为空时 while (l1 && l2){ sum = l1->val + l2->val + carry; l1 = l1->next; l2 = l2->next; t = sum % 10; carry = sum / 10; p->next = new ListNode(t); p = p->next; } while (l1){ sum = l1->val + carry; l1 = l1->next; t = sum % 10; carry = sum / 10; p->next = new ListNode(t); p = p->next; } while (l2){ sum = l2->val + carry; l2 = l2->next; t = sum % 10; carry = sum / 10; p->next = new ListNode(t); p = p->next; } if (carry){ p->next = new ListNode(carry); } return head->next; } };
去掉变量省略循环 60ms
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2){ ListNode* head = new ListNode(0); ListNode* p = head; int carry = 0; //当两个指针都不为空时 while (l1 && l2){ p->next = new ListNode( (l1->val + l2->val + carry) % 10); carry = (l1->val + l2->val + carry) / 10; p = p->next; l1 = l1->next; l2 = l2->next; } if (!l1) l1 = l2; while (l1){ p->next = new ListNode( (l1->val + carry) % 10); carry = (l1->val + carry) / 10; p = p->next; l1 = l1->next; } if (carry){ p->next = new ListNode(carry); } return head->next; } };
再次省略一些循环,42ms
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2){ ListNode* head = new ListNode(0); ListNode* p = head; int carry = 0, a, b; //当两个指针都不为空时 while (l1 || l2 || carry){ a = l1 ? l1->val : 0; b = l2 ? l2->val : 0; p->next = new ListNode( (a + b + carry) % 10); carry = (a + b + carry) / 10; p = p->next; l1 = l1 ? l1->next : NULL; l2 = l2 ? l2->next : NULL; } return head->next; } };
Python 122 ms
# Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = x # self.next = None class Solution(object): def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ head = ListNode(0) p = head carry = 0 while(l1 or l2 or carry!=0): sum = (l1.val if l1 else 0)+(l2.val if l2 else 0) +carry p.next = ListNode(sum%10) carry = sum//10 p = p.next l1 = l1.next if l1 else None l2 = l2 .next if l2 else None return head.next print(1/10,1//10)
相关文章推荐
- LeetCode 002 AddTwoNumbers
- leetcode002 Add Two Numbers
- leetcode 002 Add Two Numbers(java)
- leetcode刷题: 002 Add Two Numbers
- 【LeetCode002-003算法/编程练习C++】---Add Two Numbers||寻找最长无重复字母子串。//第三题之后有空要再想一想…
- 【JAVA、C++】LeetCode 002 Add Two Numbers
- LeetCode002 Add Two Numbers
- 002_LeetCode_2 Add Two Numbers 题解
- [Leetcode题解]002 Add Two Numbers
- leetcode 002 —— add two numbers
- leetcode002——add two numbers
- Add Two Numbers - leetcode002
- 002 Add Two Numbers [Leetcode]
- LeetCode-Add Two Numbers_002
- LeetCode 002 Add Two Numbers
- LeetCode-002 Add Two Numbers
- LeetCode002__Add Two Numbers
- 【Leetcode】002 Add Two Numbers
- [LeetCode]-002-Add Two Numbers
- 002 Add Two Numbers [Leetcode]