点击上方“程序人生”,选择“置顶公众号”

第一时间关注程序猿(媛)身边的故事

《今天你刷题了吗(?)》是小班克发起的一场做算法题的活动,该活动会尽量保持在一周一期,喜欢刷题的、或者对刷题有需要的同僚,可以跟着小班克我一起,每周一道算法题。当然,能力较强或者时间较多的朋友也可以自己去LeetCode上注册一个账号,按照自己的速度刷题。那么闲话不多说,我们一起来看看上期留下的问题的解决方案吧!

题目如下:

翻译过来就是:给出两个表示非负整数的数字链表,数字以相反的顺序存储,每个链表都存储该非负整数某一位上的数字。计算两个非负整数的和,并以链表的方式返回。简单做个比喻:342,以链表的存储形式就是,2->4->3。

解题过程:

解题思路如下:这道题在LeetCode上的难度是中等难度(在LeetCode上题目的难度只有简单、中等、困难。第一期的题目是简单)。但是我觉得这题要比上一题更加简单。我们只要将对应的位数相加即可,唯一麻烦一点的地方就是判断何时结束计算。小班克我在做这一题的时候,用了一个递归的方法,因为可以很简单的看出,其实每一位相加的规则都是一样的(满十进一之类的)。需要注意的是,递归之后返回的链表节点其实是表尾,那么我们直接来看代码吧。

/** * Definition for singly-linked list. * public class ListNode { *     public int val; *     public ListNode next; *     public ListNode(int x) { val = x; } * } */public class Solution {   public ListNode AddTwoNumbers(ListNode l1, ListNode l2)        {            AddTwoNumbersRecursion(l1, l2);

            return l1;        }

        public void AddTwoNumbersRecursion(ListNode l1, ListNode l2)        {            l1.val += l2.val;

            if (l1.val >= 10)            {                if (l1.next == null)                    l1.next = new ListNode(0);

                l1.next.val += 1;                l1.val %= 10;            }

            if (l1.next == null && l2.next == null)                return;            else if (l1.next == null && l2.next != null)                l1.next = new ListNode(0);            else if(l1.next != null && l2.next == null)                l2.next = new ListNode(0);

            AddTwoNumbersRecursion(l1.next, l2.next);        }}

时间复杂度:O(n)。为什么是O(n)呢?自己去上一期补课去!(详情请见第一期的斐波那契数列)

空间复杂度:O(n)。

这个解题方案小班克我自己还是很满意的,我也是在写完第一期的内容之后,受到斐波那契数列的启发,写出了这题答案,数据说明了一切(也可能是大家都觉得这题太简单,懒得去想更快的解题方案吧)。

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {    ListNode dummyHead = new ListNode(0);    ListNode p = l1, q = l2, curr = dummyHead;    int carry = 0;    while (p != null || q != null) {        int x = (p != null) ? p.val : 0;        int y = (q != null) ? q.val : 0;        int sum = carry + x + y;        carry = sum / 10;        curr.next = new ListNode(sum % 10);        curr = curr.next;        if (p != null) p = p.next;        if (q != null) q = q.next;    }    if (carry > 0) {        curr.next = new ListNode(carry);    }    return dummyHead.next;}

解题思路:官方使用了一个 While 循环,当 p 和 q 都为空时,跳出循环。具体代码小班克觉得没什么可以细说的(有什么看不懂的可以给编辑大大留言,我相信编辑大大会给你们一个满意的答复的。手动滑稽= =)。

时间复杂度:O(Max(m, n))。这个 While 循环是当 p 和 q 都为空时,才会终止,因此,循环会执行 Max(p 的长度,q 的长度) 次。

空间复杂度:O(Max(m, n))。从程序中,我们可以看到每一次的 While 循环,都会重新创建 x、y、sum 三个临时变量,因此空间复杂度为 O(Max(p 的长度,q 的长度))。

下期题目:

那我们接下来就来看看下一期的题目,这一题的难度是中等难度:

翻译过来就是:给你一个字符串,找出最长的没有重复字符的子字符串的长度。

我相信大家不会都只能像小班克一样用穷举法做吧,干巴爹~

点击图片get往期内容

流下了不学无术的泪水:今天你刷题了吗(二)相关推荐

  1. 流下了不学无术的泪水——今天你刷题了吗(一)

    点击上方"程序人生",选择"置顶公众号" 第一时间关注程序猿(媛)身边的故事 工作以后,你有多久没有做算法题了,反正班克我是工作一年了,然后一年没做算法题了. ...

  2. 流下了不学无术的泪水——今天你刷题了吗(三)

    点击上方"程序人生",选择"置顶公众号" 第一时间关注程序猿(媛)身边的故事 插图作者:maxwellthebeech 编者按:<今天你刷题了吗>是 ...

  3. 高中信息技术——Flash动画制作刷题点整理(二)

    前言:以下是针对高中信息技术多媒体模块Flash动画制作刷题点的整理. 1. 元件   Flash中的库里元件有以下三种: 1.1 影片剪辑   影片剪辑元件可以理解为大电影中的小电影,它可以独立于主 ...

  4. SQL leetcode 刷题答案(二)

    承接上篇 SQL leetcode 刷题答案https://blog.csdn.net/hahaha66888/article/details/89925981 5.Big Countries sel ...

  5. Nico的刷题日记(二)

    35. 搜索插入位置 题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 请必须使用时间复杂度为 O(log n) 的算 ...

  6. LeetCode刷题笔记 二叉树 二叉搜索树的操作

    669 修剪二叉搜索树 ​ 给定一个二叉查找树和两个整数 L 和 R,且 L < R,试修剪此二叉查找树,使得修剪后所有节点的值都在 [L, R] 的范围内. ​ 输入是一个二叉查找树和两个整数 ...

  7. leetcode刷题 74.搜索二维矩阵

    题目分析 这是一道简单的查找二维矩阵的题目,所以解决这题有一个最简单的解法就是遍历二维数组即可:但是我们应该注意到题目中的每行整数从左到右是按升序排列的,第一个整数大于前一行的最后一个整数,介于此,我 ...

  8. 折半查找和二叉排序树的时间性能_leecode刷题----二分搜索与二叉查找(排序)树...

    预备知识:二分查找 已知一个排序数组A,如A=[-1,2,5,20,90,100,207,800],另外一个乱序数组B,如B=[50,90,3,-1,2-7,80],求B中任意某个元素是否在A中出现, ...

  9. 《剑指0ffer》刷题笔记 -01 二维数组中的查找

    参考链接 :https://cuijiahua.com/blog/2017/11/basis_1.html https://blog.csdn.net/wang454592297/article/de ...

最新文章

  1. c++小项目:通讯录管理系统
  2. illegal base64 character 3a_双11华硕多款产品再送豪礼 高端硬件通吃最新3A大作
  3. python3.7下载安装教程-CentOS 7 下 安装 Python3.7
  4. x264编码参数大测试:10 trellis(1000Kbps)
  5. Django中HttpResponse和JsonResponse的区别和用法
  6. Android官方开发文档Training系列课程中文版:线程执行操作之创建多线程管理器
  7. Java常用设计模式————单例模式
  8. AMP、HMP、SMP
  9. python错误提示库没有注册_SpringBoot实现登录注册常见问题解决方案
  10. 华硕笔记本电池软件_华硕灵耀X逍遥测评:11代酷睿处理器加持,王者归来
  11. lstm原理及实现_LSTM原理
  12. 开课吧:Java开发学习路线-基础知识
  13. 大二学科不挂科 速冲方法推荐(离散+概率+数电+大物)
  14. php程序员中文,php中文网“php程序员工具箱” v0.1版本上线
  15. 异国他乡-写在即将离开芬兰的早晨
  16. 百度地图Web API Python模块
  17. 王争-算法与数据结构专栏第一期福利笔记(数据结构与算法学习书单)
  18. android图片上传后台后旋转的关键原因:ExifInterface
  19. 数据分析 — 用户粘性的两个计算指标(DAU/MAU和月人均活跃天数)
  20. 基于OCC与OSG的CAD平台构建值gmsh划分效果测试

热门文章

  1. Paging3、Room使用,1、从本地Room数据库加载 2、直接网络获取数据加载 3、网络访问数据到Room数据库再加载 4、封装使用
  2. 内存越界问题及malloc_chunk边界标记法和空间复用
  3. C++ int类型数据除法向上取整
  4. 几个HTML的单标签,HTML常用的几个标签
  5. linux创建指定用户ID
  6. 深入学习Spring(理论知识部分)
  7. Python函数str.split拆分字符串
  8. wind7 cywind ssh 无密码登录localhost
  9. 实用新型专利的保护期限
  10. 雅思,托福,GRE的区别和用途