ARTS - 第一周打卡

用户头像
陈文昕
关注
发布于: 2020 年 05 月 26 日
ARTS - 第一周打卡



Algorithm算法

问题

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

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

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



示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

输出:7 -> 0 -> 8

原因:342 + 465 = 807

思路

我首先想到的是,同位相加,然后计算下一位的时候把进位加上。

写的时候遇到不少问题,比如说会遇到连续进位的问题,两个链表长度不同的问题。

连续进位问题我通过递归来完成,个位加完就一直判断进位到结束。

两表长度不同,就一开始选一个链表作为主链,另一个为被加数,记得初始化就好。

解题

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
sumNode(l1,l2);
return l1;
}
public void upOne(ListNode listNodeHead){
listNodeHead.val -= 10;
if(listNodeHead.next == null){
listNodeHead.next = new ListNode(1);
return;
}else{
listNodeHead.next.val += 1;
if(listNodeHead.next.val >= 10){
upOne(listNodeHead.next);
}
}
}
public void sumNode(ListNode listNodeHead,ListNode l1){
int sum = listNodeHead.val + l1.val;
listNodeHead.val = sum;
if(sum >= 10){
upOne(listNodeHead);
}
if(l1.next == null){
return;
}else{
if(listNodeHead.next == null){
listNodeHead.next = new ListNode(0);
}
sumNode(listNodeHead.next,l1.next);
}
}
}

Review英文文章

Introduction to Thread Pools in Java

思考

看的时候需要借助一点翻译工具来阅读,这样会使阅读速度慢下来,但是反而会比读中文的文档理解的更加深入。

也许是因为计算机这个东西本来就和英文亲近,用英文来解释线程池以及一些概念会比中文翻译过来的好理解一些。

这片文章很长,但是我还是看完了,并没有全懂,我是抱着日拱一卒,终会进步的心理去学习的。

Tips

Fast Return

最近写代码会去思考怎样写才能写的优雅,怎么样写才能写的让人更容易阅读。

fast return会减少很多if else的嵌套吧,这已经可以让代码好读很多了。

Share

分享一个公众号文章吧

聪明有钱人怎么想?- 孤独大脑



发布于: 2020 年 05 月 26 日 阅读数: 69
用户头像

陈文昕

关注

还未添加个人签名 2018.07.01 加入

还未添加个人简介

评论 (1 条评论)

发布
用户头像
Fast Return 怎么理解呢 ?
我一般是先实现,后面再想着去重构。
2020 年 05 月 26 日 18:06
回复
没有更多了
ARTS - 第一周打卡