论代码能力:

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

主方法为:addTwoNumbers

自己最初的解题代码:


public class Test {public static void main(String[] args) throws InterruptedException {
//      输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
//      输出:7 -> 0 -> 8
//      原因:342 + 465 = 807
//      [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]
//      [5,6,4]ListNode aNode = initNode(new int[]{5});ListNode bNode = initNode(new int[]{5});ListNode cNode = addTwoNumbers(aNode, bNode);System.out.println(JSONObject.toJSONString(cNode));}public static ListNode initNode(int [] arr) {ListNode head = new ListNode(arr[0]);ListNode node = head;for(int i=1;i<arr.length;i++) {ListNode tNode = new ListNode(arr[i]);node.next = tNode;node = node.next;}return head;}public static class ListNode {int val;ListNode next;public ListNode(int val) {this.val = val;}}public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {List<Integer> arr1 = new ArrayList<Integer>();List<Integer> arr2 = new ArrayList<Integer>();ListNode t1 = l1;ListNode t2 = l2;while (t1!=null) {arr1.add(t1.val);t1 = t1.next;}while (t2!=null) {arr2.add(t2.val);t2 = t2.next;}List<Integer> arr3 = null;arr3 = getResultList(arr1.size() > arr2.size()?arr1:arr2, arr1.size() > arr2.size()?arr2:arr1);ListNode head = new ListNode(arr3.get(0));ListNode node = head;for(int i=1;i<arr3.size();i++) {ListNode tNode = new ListNode(arr3.get(i));node.next = tNode;node = node.next;}return head;}public static List<Integer> getResultList(List<Integer> longList, List<Integer> shortList) {List<Integer> arr3 = new ArrayList<Integer>();int jinJi = 0;for(int i=0;i<longList.size();i++) {int a = longList.get(i);int b=0;if(i<shortList.size()) {b=shortList.get(i);}int count = a+b + jinJi;if(count>9) {jinJi = 1;}else {jinJi = 0;}arr3.add(count % 10);}if(jinJi != 0) {arr3.add(jinJi);}return arr3;}}

参照标准答案重写的代码:

public class Test {public static void main(String[] args) throws InterruptedException {
//      输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
//      输出:7 -> 0 -> 8
//      原因:342 + 465 = 807
//      [1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]
//      [5,6,4]ListNode aNode = initNode(new int[]{5});ListNode bNode = initNode(new int[]{5});ListNode cNode = addTwoNumbers(aNode, bNode);System.out.println(JSONObject.toJSONString(cNode));}public static ListNode initNode(int [] arr) {ListNode head = new ListNode(arr[0]);ListNode node = head;for(int i=1;i<arr.length;i++) {ListNode tNode = new ListNode(arr[i]);node.next = tNode;node = node.next;}return head;}public static class ListNode {int val;ListNode next;public ListNode(int val) {this.val = val;}}public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {//哑节点ListNode yaNode = new ListNode(0);ListNode head = yaNode;int jinJi = 0;int benJi =0;while (l1!=null || l2!=null) {int temp = (l1 == null?0:l1.val) + (l2==null?0:l2.val) + jinJi;jinJi = temp>9?1:0;benJi = temp % 10;ListNode node = new ListNode(benJi);head.next = node;head = head.next;if(l1 != null) {l1 = l1.next;}if(l2 != null) {l2 = l2.next;}}if(jinJi != 0) {ListNode node = new ListNode(jinJi);head.next = node;}return yaNode.next;}

部分思路(按照人类解题,加法超过9进级的思路)是类似的,但是局部进行了优化(不用借助ArrayList,直接使用链表遍历即可)
减少了内存占用,并且代码更加的简洁易懂,不易出错。继续努力吧!

2019-02-21-算法-进化相关推荐

  1. FFMpeg ver 20160219-git-98a0053 滤镜中英文对照 2016.02.21 by 1CM

    FFMpeg ver 20160219-git-98a0053 滤镜中英文对照 2016.02.21 by 1CM T.. = Timeline support支持时间轴 .S. = Slice th ...

  2. 网易2019实习生招聘算法题(一)

    网易2019实习生招聘算法题(一) 题目 为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬. 牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作. 牛牛的小伙伴太多了,于是 ...

  3. 字节跳动2019春招算法题

    字节跳动2019春招算法题 1.总结 难度:容易到中等. 一些题出的太烂,不给数据范围,而且内存设置有问题,如果是刷题不建议刷. 2.题目 (1) 简单字符串模拟. #include<bits/ ...

  4. 18天精读掌握《费曼物理学讲义卷一》 第8天 2019.6.21

    18天精读掌握<费曼物理学讲义卷一> 第8天2019/6/21 1. 18日掌握<费曼物理学讲义>卷一计划概览 2. 今日学习成果 3. 今日时间表 4.Atimelogger ...

  5. 算法进化历程之剪刀石头布

    算法进化历程之剪刀石头布 小美:阿福,你玩过剪刀石头布游戏吗? 阿福:这算什么问题?谁还能没玩过剪刀石头布?要知道它可是一种世界闻名的猜拳游戏.它起源于中国,然后传到日本.朝鲜等地,随着亚欧贸易的不断 ...

  6. Unparseable date: “Fri Sep 02 21:22:57 CST 2022

    异常 Unparseable date: "Fri Sep 02 21:22:57 CST 2022"(不可分解的日期:XXX) Exception in thread " ...

  7. 【每日早报】2019/06/21

    ️每日早报️ 2019/6/21 今日看点 ✦ 信而富宣布退出P2P业务,网贷"老32家"如今仅剩7家 ✦ ofo回应无可执行财产:全力退还押金,全力自我造血 ✦ 家乐福开设京东商 ...

  8. Technology Daily - 2019/02/27

    2019/02/27 10 Instagram Tools to Grow Your Client's Audience https://medium.com/m/global-identity?re ...

  9. 【豆瓣电影】2019/11/21/Python搜索豆瓣电影(Top100)爬虫+D3.js词云(票房和豆瓣评分)实现

    [豆瓣电影爬虫]2019/11/21/Python豆瓣电影爬虫+D3.js WordCloud 1.目标 今天临时需要将100部票房最高的电影[from艺恩网:如图1],找到对应的豆瓣评分,制作D3词 ...

  10. 国际WTI原油价格日、周、月、年度数据(1986.01-2019.02)

    数据集名称:国际WTI原油价格日.周.月.年度数据 时间范围:1986.01-2019.02 数据来源:自算 相关说明:WTI原油是美国西得克萨斯的轻质原油,该原油期货合约具有良好的流动性及很高的价格 ...

最新文章

  1. 任正非:华为自己做芯片很难,咬着牙慢慢挺过来了
  2. 【Android源码】AlertDialog 源码分析
  3. 防止过拟合的处理方法
  4. arm linux 识别新硬盘_嵌入式Linux系列第13篇:USB摄像头拍照
  5. STL 之includes,set_intersection,set_union,set_difference,set_symmetric_difference
  6. leetcode 557. 反转字符串中的单词 III(Java版)
  7. C#将dataGridView中显示的数据导出到Excel(大数据量超实用版)
  8. likeshop100%开源免费商用电商系统,PC商城、H5商城、小程序商城、安卓APP商城、苹果APP商城全部100%开源,免费商用
  9. php postgresql win,Windows PHP上的PostgreSQL问题
  10. 用sql写每年的第三周_SQL的弱点(1):复杂SQL不易理解,以及软件工程如何来帮忙...
  11. 偶然遇到的Java泛型错误,百思不得其解。
  12. shell 脚本随机抽取班级学生
  13. 连接服务器的外呼系统设置,MicroSIP软电话配置说明
  14. 关于#include “stdafx.h“添加的错误问题
  15. 在浏览器输入URL,按下回车之后的流程?
  16. SQL AlawaysOn 之一:安装域控制器
  17. 法力无边的stage-0
  18. 酷桌面:IPAD上体验office的炫“酷”移动办公应用
  19. 使用 HBuilderX 打包IOS 和 安卓
  20. 惠普136w耗材贵吗_惠普136w更换硒鼓之后磨粉极低 惠普136w原装硒鼓能加碳粉吗...

热门文章

  1. 中大博士偷偷做了这件事,今天终于曝光了...
  2. 10岁高分考上大学,16岁读博的95后神童张炘炀,活成了他想要的样子吗?
  3. 华人AI界痛失“一代宗师”,计算机视觉之父黄煦涛教授去世
  4. feign和ajax,SpringCloud-feign 声明式服务调用
  5. antd request 通过jsessionid传参数_Umi-request源码阅读
  6. 墨迹天气android,墨迹天气Android产品分析
  7. io流图解 java_详细讲解JAVA中的IO流
  8. 文件共享服务器第二部,第二章-构建Samba文件共享服务器.docx
  9. java点击关闭弹出窗口_java – JPopupMenu在子弹出窗口打开时关闭
  10. aspose excel中文文档_除了VBA,还有哪些编程语言可以操作Excel文件?