博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java算法练习——两数相加
阅读量:6396 次
发布时间:2019-06-23

本文共 1437 字,大约阅读时间需要 4 分钟。

题目描述

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

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

您可以假设除了数字 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) {        ListNode q = l1, p = l2;        ListNode dummyHead = new ListNode(0);        ListNode carr = dummyHead;        int carry = 0;        while (q != null || p != null) {            int x = q != null ? q.val : 0;            int y = p != null ? p.val : 0;                        int sum = x + y + carry;                        carry = sum / 10;                        carr.next = new ListNode(sum % 10);            carr = carr.next;            if (q != null) q = q.next;            if (p != null) p = p.next;        }                if (carry > 0) {            carr.next = new ListNode(carry);        }        return dummyHead.next;    }}

手记

carry(进位)是一个很重要的变量,两个一位数相加,进位只可以是 0 或 1 ,两个数相加再加前数的进位,最大值也只为 19,例如 96 + 97,个位相加:得 3 进 1,十位相加为:9 + 9 + 1 = 19。

再看此题,链表为逆序存储数字,我们读取数字时,就是从最低位开始的,这符合我们的运算习惯。我们每读取两个链表的各一位数字,便将它们与前进位相加,结果超过 10 的部分为本次运算的进位,不超过 10的部分为本次运算留在本位的值,只要两个链表有一个不为空,两个链表将再次进位计算。

30行代码表示,如果计算结束,但上次进位值大于 0(值为 1),则将进位补到最高位。

很不错的题,优解的写法看的让人着迷。

以上

转载于:https://www.cnblogs.com/mxwbq/p/10918475.html

你可能感兴趣的文章
netstat详解
查看>>
微信小程序 --- e.currentTarget.dataset.id 获取不到值
查看>>
Introducing stapbpf – SystemTap’s new BPF backend
查看>>
详细介绍MySQL/MariaDB的锁
查看>>
0603-Zuul构建API Gateway-通过Zuul上传文件,禁用Zuul的Filter
查看>>
cocos2dx-2.x CCFileUtils文件管理分析(2)
查看>>
Emacs中多个golang项目的配置方法
查看>>
未知宽高div水平垂直居中3种方法
查看>>
Vim替换查找
查看>>
如何用sysbench做好IO性能测试
查看>>
利用线性回归模型进行卫星轨道预报
查看>>
懒加载和预加载
查看>>
前端面试题
查看>>
Python的赋值、浅拷贝、深拷贝
查看>>
用python操作mysql数据库(之代码归类)
查看>>
ArcGIS Server 10.1 SP1连续查询出现Unable to complete operation错误
查看>>
执行./configure报checking for g++... no错误
查看>>
Dojo学习笔记(十一):Dojo布局——嵌套样例
查看>>
Appium for Android元素定位方法
查看>>
pfSense LAGG(链路聚合)设置
查看>>