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. mybatis输出映射总结

    使用resultType作为输出映射 只有查询出来的列名和pojo中的属性名一致时,才会映射成功, 如果不一致,可以使用resultMap最为输出类型 不管是输出单个对象还是列表(list中包括poj ...

  2. Struts2之动态方法调用

    1.感叹号 前台页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pa ...

  3. Java的socket编程中关于bufferedWriter的发送问题

    BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); String send ...

  4. jar包 war包

    jar包和war包的区别: war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块.而jar一般只是包括一些class文件,在声明了Main_class之后是可以用java命令 ...

  5. NGUI的widget的使用

    一,我们看看widget有什么属性,如下图: 二,Pivot是什么意思? 我们都知道在Untiy3D中有一个中央坐标点,而这个Pivot这个就是选择控件的某一个点与中央坐标点定位. 如下图区别: 当你 ...

  6. 全栈开发系列学习2——django项目搭建

    项目代码:http://yunpan.cn/cHajgT4HvgHqx (提取码:8350) 配置项目: 1. 首先确保你的机器安装了python和pip,这两种安装比较简单,这里就不说了. 2. 在 ...

  7. redis还要做

    RedisTemplate对各种数据类型的操作记录. Redis深度历险:核心原理和应用实践 https://www.cnblogs.com/kismetv/p/8654978.html

  8. ARC102E - Stop. Otherwise... 组合计数

    枚举 \(i\),然后可以把 \(j\) 和 \(i - j\) 绑定成一对.把一对看成一个整的元素,与别的没有被绑定的数一起来参与选择就可以了. 但是由于实际上一对中的数是可以二选一的,所以不妨令 ...

  9. BZOJ3508 开灯 & [校内NOIP2018模拟20181027] 密码锁

    Time Limit: 10 Sec Memory Limit: 128 MB Description xx作为信息学界的大神,拥有众多的粉丝.为了感谢众粉丝的爱戴,xx决定举办一场晚会.为了气派,x ...

  10. python基础:4.请至少列举5个 PEP8 规范(越多越好)。

    1.变量命名规则: 不能与关键字重名,必须以数字字母下划线组成,且不能以数字开头 2.导包规则: # 推荐这样写 import random import sys # 不推荐这样写 import ra ...