445. Add Two Numbers II
来源:互联网 发布:linux mysql删除数据库 编辑:程序博客网 时间:2024/05/16 00:52
445. Add Two Numbers II
You are given two linked lists representing two non-negative numbers. The most significant digit comes first and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Follow up:
What if you cannot modify the input lists? In other words, reversing the lists is not allowed.
Example:
Input: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)Output: 7 -> 8 -> 0 -> 7
思路:用一个数组vector<ListNode*>pre,存储可能会因为进位val有改变的节点。首先定义一个伪节点p(0)来存储最后的结果,当然,pre中初始时就一个p。下面考虑从高位到低位加的时候,怎么进位。如果当前位的和小于9,它肯定不会进位,则将当前pre清空,只存入当前的节点。如果当前位和恰好为9,它可能会因为下一位的进位对当前位的更高位产生影响,因此因加入pre。我们可以想象,一般pre只有一个元素,当pre内有多个元素时,除了它的第一位不是9,其他位必定都是9,这是针对可能出现连续进位的情形。当前位的和大于9,即产生进位时,pre里所有在当前位之前的位就开始+1,在对10取余,然后pre里的数再次清空,压入当前位的val。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution { int len(ListNode* l) { int cnt=0; while(l) { cnt++; l=l->next; } return cnt; }public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { if(l1->val==0&&!l1->next) return l2; if(l2->val==0&&!l2->next) return l1; if(len(l1)<len(l2)) return addTwoNumbers(l2, l1); int n1=len(l1),n2=len(l2); int diff=n1-n2; int i=0; ListNode* p=new ListNode(0); ListNode* r=p; vector<ListNode*> pre; pre.push_back(p); while(i<diff) { ListNode* t=new ListNode(l1->val); p->next=t; l1=l1->next; p=p->next; if(t->val<9) pre.clear(); pre.push_back(t); i++; } while(i<n1) { int v=l1->val+l2->val; ListNode* t=new ListNode(v%10); p->next=t; if(v>9) { for(auto it:pre) (it->val)=(it->val+1)%10; pre.clear(); pre.push_back(t); }else if(v==9) pre.push_back(t); else { pre.clear(); pre.push_back(t); } l1=l1->next; l2=l2->next; p=p->next; i++; } if(r->val!=0) return r; else return r->next; }};
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II**
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II
- 445. Add Two Numbers II。
- 445. Add Two Numbers II
- Spring 框架学习—控制反转(IOC)
- ASP.NET Core读取appsettings.json的配置
- JAVA设计模式之单例模式
- POJ 2186 Popular Cows【强连通】
- maven 程序包org.junit不存在
- 445. Add Two Numbers II
- 设置UITextField占位文字的颜色
- CS/BS的区别
- android studio 中去除应用标题栏
- ffmpeg视频解码器
- 乘法口诀01
- YII2模型之增删改查
- AlphaGo:人工智能与深度学习
- 缓冲区溢出漏洞