Leetcode_Add Two Numbers
来源:互联网 发布:ubuntu core 教程 编辑:程序博客网 时间:2024/06/04 17:56
地址:http://oj.leetcode.com/problems/add-two-numbers/
思路: 应该是道简单题,大数相加,用链表来封装一下(只要记录一下新建节点的地址就OK了)
代码写的太冗余了。。。
/** * 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) { vector<int>vec; int sum, carry = 0; while(l1 && l2) { sum = l1->val + l2->val + carry; if(sum >= 10) { vec.push_back(sum-10); carry = 1; } else { vec.push_back(sum); carry = 0; } l1 = l1->next; l2 = l2->next; } if(l1) { while(l1) { sum = l1->val + carry; if(sum >= 10) { vec.push_back(sum-10); carry = 1; } else { vec.push_back(sum); carry = 0; } l1 = l1->next; } } else { while(l2) { sum = l2->val + carry; if(sum >= 10) { vec.push_back(sum-10); carry = 1; } else { vec.push_back(sum); carry = 0; } l2 = l2->next; } } if(carry) { vec.push_back(1); } ListNode* head; vector<ListNode*> addrvec; for(int i = 0; i < vec.size(); ++i) { if(i == 0) { head = new ListNode(vec[i]); } else { ListNode *p = new ListNode(vec[i]); addrvec.push_back(p); } } addrvec.push_back(NULL); ListNode* lp = head; for(int i = 0; i < vec.size(); ++i) { lp->next = addrvec[i]; lp = addrvec[i]; } return head; }};
SECOND TRIAL
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: int cnt_list_node(ListNode* head) { int cnt = 0; while(head) { ++cnt; head = head->next; } return cnt; } ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { if(!l1) return l2; if(!l2) return l1; int v = 0, carry = 0; int c1 = cnt_list_node(l1); int c2 = cnt_list_node(l2); if(c1 < c2) swap(l1, l2); ListNode*p = l1, *pre = NULL; while(l2) { pre = p; v = p->val + l2->val + carry; carry = v / 10; v %= 10; p->val = v; p = p->next; l2 = l2->next; } while(carry) { if(p) { pre = p; v = p->val + carry; carry = v/10; v %= 10; p->val = v; p = p->next; } else { ListNode* nd = new ListNode(carry); pre->next = nd; return l1; } } return l1; }};
0 0
- Leetcode_Add Two Numbers
- leetcode_Add Two Numbers
- LeetCode_Add Two Numbers
- Leetcode_Add Two Numbers
- LeetCode_Add Two Numbers
- LeetCode_Add Two Numbers
- LeetCode_Add Two Numbers(Medium)
- leetcode_add two nums
- leetcode_add two number
- Two Numbers
- Two Sum & Add Two Numbers
- 题Two--Add Two Numbers
- LeetCode: Add Two Numbers
- Add Two Numbers
- LeetCode: Add Two Numbers
- [LeetCode]Add Two Numbers
- LeetCode Add Two Numbers
- Leetcode: Add Two Numbers
- 这个团队 (一)
- HDU 1695 GCD(欧拉函数+容斥原理)
- 15. Google面试题:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
- 【C++】PAT(advanced level)1044. Shopping in Mars (25)
- ASP.NET的错误集
- Leetcode_Add Two Numbers
- HDU 1272 小希的迷宫(并查集:判断连通且结构为树)
- C++中实现通用数据结构(转)
- snprintf() 替代 sprintf()
- c# ConfigurationManager
- android---------ndk中的各个版本的下载地址。
- 使用顺序表完成学生信息的存储
- 在主机上用GDB远程调试板卡程序
- NYOJ 291 LK数学题(欧拉函数)