Leetcode :2 Add Two Numbers
来源:互联网 发布:催收数据安全管理制度 编辑:程序博客网 时间:2024/04/30 05:53
LEETCODE:
题意理解:
也就是给定两个非空链表,然后按照十进制加法处理这两个链表并存入一个新链表中。
先将解题代码放上:
class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* l3; ListNode* old; bool ok = true; int zero = 0; while(l1 != NULL || l2 != NULL || zero != 0){ int x = 0; if(l1 != NULL && l2 != NULL){ x = (l1->val + l2->val + zero)%10 ; zero = (l1->val + l2->val + zero)/10; // cout<<x<<endl; l1 = l1->next; l2 = l2->next; }else if(l1 == NULL && l2 != NULL){ x = (l2->val + zero)%10; zero = (l2->val + zero)/10; l2 = l2->next; }else if(l1 != NULL && l2 == NULL){ x = (l1->val + zero)%10; zero = (l1->val + zero)/10; l1 = l1->next; } else { x = zero; zero = 0; } if(ok) { l3 = new ListNode(x); ok = false; old = l3; }else{ l3->next = new ListNode(x); l3 = l3->next; } } return old; }};
算法:
根据题意,我们可以知道,基本上这道题就是将两个”大“数加在一起,从个位开始按照十进制进位。
所以我们可以取出两个链表相应位值的数字相加,然后用变量zero记录每次的进位,每次使用进位后在计算出进位即可。(参考高精度加法)
解题过程中,各种测试例子基本都会存在,比较典型的是测试进位,l1比l2长,l2比l1长。
所以按照相应情况分类讨论即可。-另一种思路(部分分):
我们可以将两个链表分别化为一个数字,然后让他们想加,再逐个拆分数字存入链表即可。
这样在链表很长的时候就不可行了,因为不存在一种类型能存放100位的整数,但是不失为一个不错的思考方向。
阅读全文
1 0
- LeetCode 2 - Add Two Numbers
- LeetCode 2: Add Two Numbers
- Leetcode: Add Two Numbers (2)
- [leetcode 2] Add Two Numbers
- [Leetcode] 2 - Add Two Numbers
- LeetCode 2:《Add Two Numbers》
- LeetCode | #2 Add Two Numbers
- LeetCode 2 Add Two Numbers
- [Leetcode]2Add Two Numbers
- leetcode #2 Add Two Numbers
- leetcode-2 Add Two Numbers
- LeetCode 2 Add Two Numbers
- [leetcode] #2 Add Two Numbers
- LeetCode-2 Add Two Numbers
- LeetCode-2-Add Two Numbers
- Leetcode[2] Add Two Numbers
- LeetCode 2 Add Two Numbers
- LeetCode 2 Add Two Numbers
- Problem 1002 cable cable cable-2017 ACM/ICPC Asia Regional Shenyang Online
- ImageLoader的默认配置
- 词法作用域之欺骗词法
- poj3237 Tree(树链剖分)
- 转时间复杂度和空间复杂度详解
- Leetcode :2 Add Two Numbers
- XListView上拉加载下拉刷新
- 第四章 分治策略
- Fast Input
- CSS实现多栏布局的几种方式
- G
- 33muduo_net库源码分析(九)
- ChokBox的全选反选以及计算数量
- 淡入淡出放大放小