Leetcode每日一道 -- 两数相加
2018-11-22 13:12
501 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_19332527/article/details/84336961
题目链接: https://leetcode-cn.com/problems/add-two-numbers/description/
题目描述:
[code]给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
题目分析: 就是基于链表实现加法操作,题目不难但是写起来需要注意的细节很多。需要考虑的几种情况就是两个数位数不一样、两个数相加之后最高位需要进位。代码如下:
[code]class Solution: def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ res=ListNode(0) res.next=ListNode(0) p=res #进行的是浅复制 jiashu=0 while l1 or l2: num1,num2=0,0 if l1: num1=l1.val if l2: num2=l2.val jiashu=num1+num2+jiashu//10 p.next=ListNode(jiashu%10) p=p.next if l1: l1=l1.next if l2: l2=l2.next if jiashu//10!=0: p.next=ListNode(jiashu//10) return res.next
C++代码如下:
[code]class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* res = new ListNode(0); int jiashu=0; ListNode* p=res; while( l1!=NULL || l2 !=NULL) { int num1=0,num2=0; if(l1 != NULL) num1=l1->val; if(l2 != NULL) num2=l2->val; jiashu=num1+num2+jiashu/10; p->next=new ListNode(jiashu%10); p=p->next; if(l1!=NULL) l1=l1->next; if(l2!=NULL) l2=l2->next; } if(jiashu/10!=0) { p->next=new ListNode(jiashu/10); } return res->next; } };
注意点:
(1). 指针访问结构体或者类的值用 -> 进行调用。
(2). 为了考虑最后一位数字可能出现的进位和第一位数字的赋值,最合理的选择是丢弃一个ListNode
我写的第一个版本是没有丢弃第一个ListNode 的,但是速度比较慢,而且实现还麻烦,如下:
[code]class Solution: def addTwoNumbers(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ res=ListNode(0) tmp=res jinwei=0 start=False while l1 or l2: if start: tmp.next=ListNode(0) tmp=tmp.next start=True if l1 is None: val1=0 else: val1=l1.val if l2 is None: val2=0 else: val2=l2.val s=val1+val2+jinwei jiashu,jinwei=s%10,s//10 tmp.val=jiashu if l1 is not None: l1=l1.next if l2 is not None: l2=l2.next if jinwei != 0: tmp.next=ListNode(0) tmp.next.val=jinwei return res
阅读更多
相关文章推荐
- LeetCode 2. Add Two Numbers(两数相加)
- [leetcode]两数相加
- Leetcode每日一道 -- 整数反转
- [LeetCode] 2. Add Two Numbers 两数相加 @python
- Leetcode002--单链表两数相加
- 链表:链表两数相加( LeetCode 2. Add Two Numbers(两数相加))
- leetcode-2-两数相加(add two numbers)-java
- Leetcode每日一道 -- 无重复字符的最长子串
- LeetCode 2. 两数相加
- LeetCode 2 两数相加(链表)
- 【LeetCode】- Two Sum(两数相加)
- 【LeetCode】2. 两数相加(Add Two Numbers,28.6%,中等)
- [LeetCode]371.Sum of Two Integers两数相加
- leetcode算法题:两数相加(Java实现-效率超过100%提交者)
- LeetCode 2 两数相加 Python
- Leetcode 653. Two Sum IV - Input is a BST 两数相加4 解题报告
- LeetCode 02. 两数相加(链表) 03.最大不重复的字符串
- [LeetCode] Add Two Numbers 两数相加
- leetcode 两数相加
- 每天一道LeetCode-----将用数组表示的整数加一,两个用字符串表示的(二进制)数相加