LeetCode OJ #2 Add Two Numbers
来源:互联网 发布:php输出99乘法表 编辑:程序博客网 时间:2024/06/06 09:10
https://leetcode.com/problems/add-two-numbers/
题意:两个链表表示两个数 ,
2 4 3
5 6 4
按照加法的规则从左往右加以及 进位。
输出:和的链表。
仍然是水题。一些特殊情况需要考虑(这些做题的时候我考虑到了)
1、如果两个长度不等,如l1>l2 ,那么需要l1比l2多出来的部分加上进位copy到ans里
2、5+5的情况,虽然长度相等,但是最高位进位了
可惜,WA了两发,因为
正确的应该是
int v = l1->val + l2->val +add;ans -> val = v%10;我写成
int v = l1->val + l2->val;ans -> val = v%10+add;
真尼玛二笔。。。另外数据结构确实不熟了,得写一写STL源码剖析了。。。
下面是测试程序
#include <cstdio>#include <cstring>#include <vector>#include <algorithm>#include <iostream>using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} };ListNode * a=NULL, * b=NULL;class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { int add = 0; ListNode* ans = 0; ListNode* ret=0; int f = 0; if(l1||l2)ans = new ListNode(0); while(l1 && l2){ int v = l1->val + l2->val +add; //cout <<"DEBUG" << l1->val << " " << l2->val << endl; if(f == 0){ ret = ans; f++; ans -> val = v%10; }else{ ans -> next = new ListNode(0); ans = ans ->next; ans -> val = v%10; ans ->next = 0; } add = v/10; l1 = l1->next; l2 = l2->next; } //最后需要处理Add if(l1 || l2){ ListNode* remain = l1 ? l1 : l2; while(remain){ //cout <<"DEBUG" << remain->val << endl; int v = remain->val+add;// + l2->val; ans->next = new ListNode(v%10); add = v/10; ans = ans->next; ans->next = NULL; remain = remain->next; } } if(add){ ans->next = new ListNode(add); ans->next->next = 0; } return ret; }};int main(){ //freopen("in.txt","r",stdin); string str1, str2; cin >> str1 >> str2; ListNode *sta=NULL, *stb=NULL; if(str1.size())sta = a = new ListNode(0); for(int i=0;i<str1.size();i++){ a->val = str1[i]-'0'; a->next = (i==str1.size()-1)?NULL:new ListNode(0); a = a->next; } if(str2.size())stb = b = new ListNode(0); for(int i=0;i<str2.size();i++){ b->val = str2[i]-'0'; b->next = (i == str2.size()-1)?NULL:new ListNode(0); b = b->next; } ListNode* ans = ((new Solution())->addTwoNumbers(sta,stb));//ListNode* ans = NULL; while(ans){ cout << ans->val << endl; ans = ans -> next; } return 0;}
0 0
- LeetCode OJ #2 Add Two Numbers
- LeetCode OJ : 2 Add Two Numbers
- Leetcode OJ 2 Add Two Numbers [Medium]
- LeetCode OJ:Add Two Numbers
- LeetCode OJ - Add Two Numbers
- LeetCode OJ Add Two Numbers
- LeetCode OJ - Add two Numbers
- LeetCode OJ ----Add Two Numbers
- LeetCode OJ:Add Two Numbers
- Leetcode OJ:Add Two Numbers
- LeetCode OJ 第2题 Add Two Numbers 解题报告
- [LeetCode OJ][002]Add Two Numbers
- 【LeetCode OJ 002】Add Two Numbers
- LeetCode OJ 02 Add Two Numbers
- <LeetCode OJ> 2. Add Two Numbers
- LeetCode OJ 2.Add Two Numbers
- LeetCode OJ 2. Add Two Numbers
- LeetCode OJ(2.Add Two Numbers)
- spring两个重要属性lazy-init和abstract
- Fast RCNN ubuntu下安装笔记
- std::nth_elelment排序
- 百度地图进阶【POI数据检索】
- java语言实现结构型设计模式—外观模式
- LeetCode OJ #2 Add Two Numbers
- H - Towers (五一训练)
- js 测试性能
- Z-Stack的运行角度的理解(仅作个人学习笔记,希望别人评指正)
- 关于在xcode中添加第三方文件夹的问题
- 第九周 项目五:方程类
- 整数中1出现的次数(从1到n整数中1出现的次数)
- 01_01 工具概览
- 剑指offer 面试题35—第一个只出现一次的字符