Leetcode(C++)——2. 两数相加
2019-02-25 19:52
393 查看
2. 两数相加
①题目描述
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
②示例
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
③解法
方法一:逐位相加从各位开始逐渐向高位前进,类似小学的加法。
时间复杂度为O(max(l1,l2))。
class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode *head = new ListNode(0); ListNode *p = l1, *q = l2, *end = head; int flag = 0; while(p || q) { int x = (p != NULL)?p->val:0; int y = (q != NULL)?q->val:0; int sum = x + y + flag; flag = sum / 10; end->next = new ListNode(sum % 10); end = end->next; if(p != NULL) p = p->next; if(q != NULL) q = q->next; } if(flag > 0) end->next = new ListNode(flag); return head->next; } };
Leetcode的测试结果:
1、链表l1 l2转化为数字
2、两数字相加
3、数字转化为链表
只能通过小的数测试,太大的数没法计算,没能通过leetcode的大数测试。
class Solution { public: int list2num(ListNode *head) { ListNode *tmp; if(head == NULL) return 0; tmp = head; int num = 0, count = 0; while(tmp) { //cout<<tmp->val<<"==>"; num += tmp->val * pow(10, count++); tmp = tmp->next; } //cout<<endl; return num; } ListNode *num2list(int num) { ListNode *head, *end; int flag = 0; if(num < 10) { ListNode *p2 = new ListNode(num); return p2; } while(num >= 10) { //cout<<"num:"<<num<<endl; ListNode *p = new ListNode(-1); p->val = num % 10; p->next = NULL; if(flag == 0) { head = p; end = p; flag = 1; } else { end->next = p; end = p; } //print_list(head); num = num / 10; } if(num != 0) { ListNode *p1 = new ListNode(-1); p1->val = num; p1->next = NULL; end->next = p1; } return head; } ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { int total = list2num(l1) + list2num(l2); //cout<<"total:"<<total<<endl; return num2list(total); } };
Leetcode的测试结果:
④总结
暂时没找到大佬超过99%的解法,以后有思绪的话继续补充!
相关文章推荐
- LeetCode2. python实现:两数相加问题☆☆
- LeetCode题目C++实现:2. 两数相加
- leetcode 链表里的两数相加 C++实现
- LeetCode 2. Add Two Numbers(两数相加)
- LeetCode题目C++实现:1. 两数之和
- 【LeetCode】- Two Sum(两数相加)
- 从零打卡leetcode之day 2---两数相加
- leetcode2两数相加,c++
- [leetcode]两数相加
- leetcode习题集——2. 两数相加
- Leetcode 第二题,两数链表相加
- leetcode 两数相加
- LeetCode 2 两数相加 Python
- LeetCode 02. 两数相加(链表) 03.最大不重复的字符串
- leetcode 2. 两数相加(Java 版)
- Leetcode刷题33-258.各位相加(C++)
- Leetcode(2)两数相加
- LeetCode 2. 两数相加
- leetcode 1 Two sum(两数相加)
- Leetcode 653. Two Sum IV - Input is a BST 两数相加4 解题报告