Leetcode第2题思考过程分析:耗费的时间与思考过程

1、 审题耗费了很长时间,英文看不懂。两个单链表代表了两个整数,整数逆序,(2 -> 4 -> 3) + (5 -> 6 -> 4),(2 -> 4 -> 3)表示342,另一个数是456,和为708;巧合的是243+564=807,这个巧合不能用来解题。

2、 解题的初步思路是逆序链表,将数字存在普通数组里(这需要动态数组,因为输入的链表长度未定),然后相加,再把sum分解为各位数字,逆序存入单链表(这一步令我困惑的是对两个链表的操作有重复的,想着能不能简化,其实顺序访问链表存入数组是可行的)。这个时候我已有的知识是:sum%10这样的操作可以得到个位数。

3、 思考ListNode* l1是如何存这些数字的,l1是不是为空的头指针。其实第一个节点就存了(2 -> 4 -> 3)的2。

注意链表里有个函数,所以new ListNode(n)可以初始化一个节点,next置为NULL

4、 下面是代码各部分当时的思考分析

0:考虑链表有没有头指针,(2 -> 4 -> 3),l1节点存的2;

1:想着declare一个ListNode指针有两种写法

2:顺序遍历链表,不用new的数组,vector添加元素有push_back,想了下有没有push_front,vector为了效率,不支持,又考虑用insert操作。

4:从数字转换为int,vector存的顺序为(2 -> 4 -> 3),用正向iterator首先得到低位2,但用num1=num1*10+*it迭代需要先从3开始,由此用reverse_iterator.

步骤2和4因为有两个链表,需要重复这两步,考虑过如何简化,又把2考虑为链表逆序,不用vector,只用指针操作,其实多想了

5:对和需要分解为各位数字,并用创建的新链表接收。考虑了while条件为numSum!=0,

该如何写循环语句,是用尾插法还是头插法,还把newSum=newSum/10写成newSum=newSum%10。

第五步耗费了大量时间,总是想不清楚,感觉很混乱,因为并没有访问链表时p=p->next这种现成的语句。

3、原本写成int,submit报错如下:测试 [9,1999999999]不通过,得到的结果很奇怪。

Num2的值为1410065399,不是应该为9999999991吗?为了检测程序中的错误,添加了很多cout语句。看4部分代码,没错啊。其实问题不是出在4,而是整形溢出了,查了int最大值,比9999999991小。把num1和num2改为long型的,又遇到了错误,这个时候我才意识到test case中有大数,连long long都装不下。需要用大数计算。

审题花费时间,然后是想出整体解决思路,实现整体思路中的步骤,每个步骤可能有多种写法(这是个广度搜索过程),前步骤又影响后步骤(这是个深度搜索思考过程,如果进行不下去了,会回到某点),如果遇到想不清细节的部分就会很耗时间。代码需要考虑整体,而脑力又只够思考局部。

第一次刷Leetcode,为什么耗费很多时间的更多相关文章

  1. 第一次刷leetcode小结

    LeetCode 上不会的 Reverse Integer Gray Code Generate Parentheses Pascal's Triangle II 正方向读和反方向读保持不变的区别 T ...

  2. 刷leetcode是什么样的体验?【转】

    转自:https://www.zhihu.com/question/32322023 刷leetcode是什么样的体验? https://leetcode.com/ 1 条评论   默认排序 按时间排 ...

  3. 用 JavaScript 刷 LeetCode 的正确姿势【进阶】

    之前写了篇文章 用JavaScript刷LeetCode的正确姿势,简单总结一些用 JavaScript 刷力扣的基本调试技巧.最近又刷了点题,总结了些数据结构和算法,希望能对各为 JSer 刷题提供 ...

  4. 刷LeetCode的正确姿势——第1、125题

    最近刷LeetCode比较频繁,就购买了官方的参考电子书 (CleanCodeHandbook),里面有题目的解析和范例源代码,可以省去非常多寻找免费经验分享内容和整理这些资料的时间.惊喜的是,里面的 ...

  5. 初刷LeetCode的感受

    自从上个月进入实验室的云安全项目组后,因为要接触到实际的代码,在实验室博士的建议下我们项目组的硕士开始刷LeetCode练习编程能力,保持每周抽空刷几道算法题.虽然刷的不多,到现在一共只刷了不到30题 ...

  6. 从心出发-刷leetcode写给5年后的自己

    而立之年终未立,不惑而年犹存惑!这或许就是所谓的中年危机吧! 自认为是一个"勤奋"的人,又"未有寸功",天天碌碌,不知何为. "常立志"而未 ...

  7. 《通过刷leetcode学习Go语言》之(1):序言

    Author       : Email         : vip_13031075266@163.com Date          : 2021.03.07 Version     : 北京 C ...

  8. 用JavaScript刷LeetCode的正确姿势

    虽然很多人都觉得前端算法弱,但其实 JavaScript 也可以刷题啊!最近两个月断断续续刷完了 leetcode 前 200 的 middle + hard ,总结了一些刷题常用的模板代码.走过路过 ...

  9. GitHub 热点速览 Vol.18:刷 LeetCode 的正确姿势

    作者:HelloGitHub-小鱼干 摘要:找对路子,事半功倍,正如本周 GitHub Trending #刷 LeetCode# 主题想表达的那般,正确的学习姿势方能让人走得更远,走进大厂

随机推荐

  1. c#批量插入

    一.创建一个用来测试的数据库和表 USE [Test] GO /****** Object: Table [dbo].[student] Script Date: 2019/4/11 15:38:59 ...

  2. C# 字符串Trim进阶

    private void button1_Click(object sender, EventArgs e) {//去掉字符串头尾指定字符 string MyInfo= "--中华人民共和国 ...

  3. Linux筛选数据

    grep命令:在文件中查找关键字,并显示所在行(Globally search a Regular Expression and Print) grep text file:在file文件中搜索tex ...

  4. liunx-网络基础

    liunx 网络配置  ifconfig: ipconfig -a ;显示信息 ifconfig eth1 up //开启网络接口 ifconfig eth1 down //关闭网络接口 ifconf ...

  5. zabbix入门之定义触发器

    zabbix入门之定义触发器 触发器的概念 触发器的定义:界定某特定的item 采集到数据的非合理区间或非合理状态.通常为逻辑表达式. 逻辑表达式(阈值):通常用于定义数据的不合理区间,其结果如下: ...

  6. 三 Bash Shell 结构

    Bash Shell 程序结构主要有 : 变量设定  内置命令 Shell 语法结构 函数 其他命令行程序构成 例子: [root@localhost ~]# vim test.sh #!/bin/b ...

  7. CentOS下安装gdb的方法

    https://blog.csdn.net/zlk252620068/article/details/79564944

  8. NOSQL导图

  9. Spring入门-框架搭建

    步骤: 导包 四个核心包: 日志包:由于市场上已经有更好的日志包,所以spring不用自己的,而是用apache的日志. 搞对象 由于spring是用来装对象的容器,所以得搞个对象让它装 书写配置文件 ...

  10. Java 实现文件复制的不同方法

    用不同的方法实现文件的复制 1. 通道 Channel,它是一个对象,可以通过它读取和写入数据.拿NIO与原来的I/O比较,通道就像是流.是对接操作系统底层和缓冲区的桥梁. 2. 性能比较 内存映射最 ...