第十八周算法分析与设计:Add Two Numbers
来源:互联网 发布:植发靠谱吗 知乎 编辑:程序博客网 时间:2024/06/05 08:40
问题描述:
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order 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.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
题目来自此处
解法思路:
看题目的意思就是普通的加法操作。从两个链表的首位开始对应位置的数字相加,一直加到链表的末端。其中需要考虑的是进位——主要需要注意的是进位的处理:如果后一个节点存在,则加一(而且特别需要注意的是若后一个节点为9,则需变为0往下一位加1);如果后一个节点不存在,则需要创建一个新的节点。
class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* head = new ListNode(1); ListNode* cur_node = head; bool flag = false; while(l1&&l2){ ListNode* new_node = new ListNode(1); new_node->val = l1->val + l2->val; if(flag){ new_node->val += 1; flag = false; } if(new_node->val >= 10) { flag = true; new_node->val -= 10; } cur_node->next = new_node; cur_node = cur_node->next; l1 = l1->next; l2 = l2->next; } ListNode* get_next = (l1?l1:l2); if(get_next){ cur_node->next = get_next; while(get_next&&flag){ cur_node = get_next; get_next->val += 1; if(get_next->val>=10){ get_next->val -= 10; get_next = get_next->next; flag = true; } else flag=false; } } if(!get_next&&flag){ ListNode* flag_node = new ListNode(1); cur_node->next = flag_node; } return head->next; }};
算法的时间复杂度为
写得乱得一笔~没考虑对进位的判断和处理的优化。
是不是快要完结撒花了?
阅读全文
0 0
- 第十八周算法分析与设计:Add Two Numbers
- 算法分析与设计课程(1):Add Two Numbers
- 算法分析与设计week02--2.Add Two Numbers
- 算法分析与设计第一周习题:2. Add Two Numbers
- 算法设计与分析(1)-- Add Two Numbers(难度:Medium)
- 算法分析与设计——leetcode刷题之Add Two Numbers(Medium)
- 算法分析与设计——LeetCode:2.Add Two Numbers
- 算法分析与设计——LeetCode Problem.2 Add Two Numbers
- 算法分析与设计——LeetCode Problem.2 Add Two Numbers
- LeetCode算法分析2.Add Two Numbers
- Add Two Numbers(算法分析week1)
- (算法分析Week5)Add Two Numbers[Medium]
- Add Two Numbers算法
- 算法第二周Add Two Numbers[medium]
- 算法设计Week1 LeetCode Algorithms Problem #2 Add Two Numbers
- 算法练习:Add Two Numbers
- Leetcode题目分析 2. Add Two Numbers
- 每日算法之四:Add Two Numbers
- 支付宝JAVA端支付与验签
- java多线程总结五:线程池的原理及实现
- jQuery插件开发详解
- Ubuntu安装Solr
- 使用VS2010开发ActiveX(MFC)控件(3)——添加接口及WEB调用
- 第十八周算法分析与设计:Add Two Numbers
- java.lang.Error: Unresolved compilation problem:
- I.MX6Q linux驱动层从串口输出dev_dbg信息
- java中常见jar包的作用
- 关于iBase4J使用的一点心得体会
- webpack学习笔记-4-less-loader
- MaterialDialog 仿Android 5.0原生的AlertDialog样式的对话框
- Android MediaRecoder实现电话录音,其中出现录制成功但没有声音
- MySQL 数据表创建报错:there can be only one auto column and it must be defined as a key