Add Two Numbers

方法一:

  考虑到有进位的问题,首先想到的思路是:

  先分位求总和得到 totalsum,然后再将totalsum按位拆分转成链表;

  1. ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
  2. int sum = ;
  3. int i = ;
  4. while(l1 != NULL && l2 != NULL)
  5. {
  6. sum += i*(l1->val + l2->val);
  7. i *= ;
  8. l1 = l1->next;
  9. l2 = l2->next;
  10. }
  11. while(l1 != NULL)
  12. {
  13. sum += i * (l1->val);
  14. i *= ;
  15. l1 = l1->next;
  16. }
  17. while(l2 != NULL)
  18. {
  19. sum += i * (l2->val);
  20. i *= ;
  21. l2 = l2->next;
  22. }
  23. //fen
  24. ListNode *head = new ListNode();
  25. ListNode *p = head;
  26. if(sum == ) return head;
  27. while(sum!=)
  28. {
  29. p->next = new ListNode(sum%);
  30. p = p->next;
  31. sum /= ;
  32. }
  33. return head->next;
  34. }

  修修改改总算是通过了基本测试,但并不是100%通过;

  这就奇怪了,为什么运算得好好的,遇到这组测试就偏偏出了问题。输出中间结果一看,才知道是 int 型溢出了。因此将变量 sum 和变量 i 都从int型换成 long long 型。这下总该行了吧?

  没想到呀,还有更长的测试数据。

  静下心来想一想,既然输入的数据是链表的形式,必然会有超过 long long 长度的情况。此解决方案存在巨大的隐患!!!

方法二:

  换一种思维方式,只需要关注同等位的相加,进位1或者不进位。问题很简单嘛,同等位相加加入到新链表中,若有进位则记录到下次同等位的相加中....

  1. ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
  2. ListNode *head = new ListNode();
  3. ListNode *p = head;
  4. int sum = ;
  5. while(l1 != NULL || l2 != NULL)
  6. {
  7. if(l1 != NULL)
  8. {
  9. sum += (l1->val);
  10. l1 = l1->next;
  11. }
  12. if(l2 != NULL)
  13. {
  14. sum += (l2->val);
  15. l2 = l2->next;
  16. }
  17. p->next = new ListNode(sum%);
  18. p = p->next;
  19. sum /= ;
  20. }
  21. if(sum != )
  22. p->next = new ListNode(sum);
  23. return head->next;
  24. }

基础补充

  回顾下链表的创建个输出,以头结点不存内容为例。

1、链表的创建:

  1. ListNode* CreatList()
  2. {
  3. ListNode *head = new ListNode();
  4. ListNode *p = head;
  5. int x = ;
  6. while()
  7. {
  8. cin>>x;
  9. if(x == -)
  10. break;
  11. p->next = new ListNode(x);
  12. p = p->next;
  13. }
  14. return head;
  15. }

2、打印链表:

  1. void PrintList(ListNode *head)
  2. {
  3. ListNode* p = head;
  4. while(p->next!=NULL)
  5. {
  6. p = p->next;
  7. cout<<p->val<<"->";
  8. }
  9. cout<<endl;
  10. }

LeetCode之Add Two Numbers的更多相关文章

  1. LeetCode(2) || Add Two Numbers && Longest Substring Without Repeating Characters

    LeetCode(2) || Add Two Numbers && Longest Substring Without Repeating Characters 题记 刷LeetCod ...

  2. LeetCode:1. Add Two Numbers

    题目: LeetCode:1. Add Two Numbers 描述: Given an array of integers, return indices of the two numbers su ...

  3. [LeetCode] 445. Add Two Numbers II 两个数字相加之二

    You are given two linked lists representing two non-negative numbers. The most significant digit com ...

  4. LeetCode 面试:Add Two Numbers

    1 题目 You are given two linked lists representing two non-negative numbers. The digits are stored in ...

  5. LeetCode #002# Add Two Numbers(js描述)

    索引 思路1:基本加法规则 思路2:移花接木法... 问题描述:https://leetcode.com/problems/add-two-numbers/ 思路1:基本加法规则 根据小学学的基本加法 ...

  6. [Leetcode Week15] Add Two Numbers

    Add Two Numbers 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/add-two-numbers/description/ Descrip ...

  7. [LeetCode] 2. Add Two Numbers 两个数字相加 java语言实现 C++语言实现

    [LeetCode] Add Two Numbers 两个数字相加   You are given two non-empty linked lists representing two non-ne ...

  8. [LeetCode] 2. Add Two Numbers 两个数字相加

    You are given two non-empty linked lists representing two non-negative integers. The digits are stor ...

  9. LeetCode 2. add two numbers && 单链表

    add two numbers 看题一脸懵逼,看中文都很懵逼,链表怎么实现的,点了debug才看到一些代码 改一下,使本地可以跑起来 # Definition for singly-linked li ...

随机推荐

  1. django 简单路由配置

    Django==2.0.1 版本路由配置: 1.在manage.py同级目录下新建一个应用app1 在app1下新建urls.py文件,定义一个app1的空白路由: from django.urls ...

  2. 利用PCA进行故障监测

    利用PCA进行故障监测,传统的统计指标有两种:Hotelling-T2和平方预测误差(Squared prediction error, SPE).T2统计量反映了每个主成分在变化趋势和幅值上偏离模型 ...

  3. Python基础知识:测试代码

    1.Python标准库中的模块unittest提供了代码测试工具. 单元测试用于核实函数的某个方面没有问题: 测试用例是一组单元测试,这些单元测试一起核实函数在各种情形下的行为都符合要求. 通俗的理解 ...

  4. C语言四舍五入

    //今天遇到了四舍五入的问题,这些问题如果不看别人的真的难想出这么巧妙的方法啊.努力积累,早日成为大佬. int i = (int)(a + 0.5) ////小数部分大于0.4,加上0.5就会超过整 ...

  5. 查看tomcat项目中,具体占用cpu高的线程。

    1.查看主进程占用cpu高: 此处主进程:27823 ~]# top top - :0: up days, :, 3 users, load average: 13.12, 13.31, 13.23 ...

  6. 解决win10系统dpi放大后,部分网页文字颜色很浅的问题

    前段时间,换了个27寸的4k显示器.原始分辨率下文字太小,眼睛估计得看瞎 放大dpi后,这问题,那问题,好多 百度知道,淘宝,这网页文字颜色也非常的浅,看着眼睛很累人 看了半天是字体若的祸 暂时发现A ...

  7. Linux 小知识翻译 - 「Linux之父 Linus」

    作为新年的第一次,这次想简单介绍下Linus这个人.(这篇文章是作者新年初写的,所以有这么句话) Linux之父,同时也是现在linux内核开发最终决定的人物就是「Linus Torvalds」.「L ...

  8. creo5.0安装教程(图文详解)

    PTC公司最近发布了Creo 5.0正式版 ,作为最具其革命性的新一代产品设计软件,其所提供专业的二维和三维设计设计,能帮助企业和公司进行产品生命周期管理(PLM)和制定服务管理解决方案.Creo5. ...

  9. EasyUI设置选中复选框

    //设置选中 $('#isBind').prop('checked', true); //获取是否选中 var isChecked = $('#isBind').prop('checked'); if ...

  10. C#用默认浏览器打开特定网址的几种方法

    方法一:从注册表中读取默认浏览器可执行文件路径 private void button1_Click(object sender, EventArgs e) { //从注册表中读取默认浏览器可执行文件 ...