LeetCode刷题第二天
2.给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 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) {
//定义哑结点,哑节点(dummy node)是初始值为NULL的节点,哑结点的引入可以解决头结点为空的情况
ListNode dummyHead = new ListNode(0);
// p,q 分别为链表1,链表2的指针,当前节点初始化为哑结点
ListNode p = l1, q = l2, current = dummyHead;
//进位标志
int carry = 0;
while(p!= null || q!= null){
int x = (p!= null) ? p.val : 0;
int y = (q!= null) ? q.val : 0;
int sum = x + y + carry;
//更新进位标志
carry = sum / 10 ;
//将相加的结果赋值
current.next = new ListNode(sum%10);
//指针后移一位
current = current.next;
if(p!=null) p = p.next;
if(q!=null) q = q.next;
}
if(carry>0){
//如果进位为1,就要加上1
current.next = new ListNode(carry);
}
返回结果链表
return dummyHead.next; }
}
很精致的答案
学到的知识
1 三元运算符
Int A,B,C;
A=2;
B=3;
C=A>B ? 100 :200;
这条语句的意思是,如果A>B的话,就将100赋给C,否则就将200赋给C;
2 取余取整
7/2 为3 取整
7%2 为1 取余
3 整体思路
计算两个数字的和,首先从最低有效位也就是列表 l1和 l2的表头开始相加。
由于每位数字都应当处于 0…9 的范围内,我们计算两个数字的和时可能会出现“溢出”。例如,5+7=12。
在这种情况下,我们会将当前位的数值设置为 2,并将进位 carry=1 带入下一次迭代。
进位 carry必定是 0或 1,这是因为两个数字相加(考虑到进位)可能出现的最大和为 9 + 9 + 1 = 19
- 将 x设为结点 p的值。如果 p 已经到达 l1 的末尾,则将其值设置为 0。
- 将 y 设为结点 q 的值。如果 q 已经到达 l2 的末尾,则将其值设置为 0。
- 设定 sum = x + y + carry
- 更新进位的值,carry = sum / 10
- 创建一个数值为 (sum \bmod 10)的新结点,并将其设置为当前结点的下一个结点,然后将当前结点前进到下一个结点。
- 同时,将 p 和 q 前进到下一个结点。
- 检查 carry = 1是否成立,如果成立,则向返回列表追加一个含有数字 1的新结点。
- 返回哑结点的下一个结点。
LeetCode刷题第二天的更多相关文章
- leetcode刷题第二天<两数相加>
题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表 ...
- 【算法题目】Leetcode算法题思路:两数相加
在LeetCode上刷了一题比较基础的算法题,一开始也能解出来,不过在解题过程中用了比较多的if判断,看起来代码比较差,经过思考和改进把原来的算法优化了. 题目: 给出两个 非空 的链表用来表示两个非 ...
- #leetcode刷题之路2-两数相加
给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...
- leetcode刷题笔记-1. 两数之和(java实现)
题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元素不能使 ...
- LeetCode 刷题笔记 1. 两数之和(Two Sum)
tag: 栈(stack) 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案. ...
- (1)leetcode刷题Python笔记——两数之和
题目如下: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数 ...
- leetcode刷题第一日<两数和问题>
开始就用到了c++的哈希表是真的恶心,首先学习一波基础知识 https://blog.csdn.net/u010025211/article/details/46653519 下面放下大佬的代码 cl ...
- LeetCode(2): 两数相加
本内容为LeetCode第二道题目:两数相加 # -*- coding: utf-8 -*- """ Created on Sun Mar 10 10:47:12 201 ...
- [LeetCode]2.Add Two Numbers 两数相加(Java)
原题地址: add-two-numbers 题目描述: 给你两个非空的链表,表示两个非负的整数.它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字. 请你将两个数相加,并以相同形式返回 ...
- 【LeetCode】Add Two Numbers(两数相加)
这道题是LeetCode里的第2道题. 题目要求: 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将 ...
随机推荐
- IDEA取消默认工作区间
- 813. Largest Sum of Averages
We partition a row of numbers A into at most K adjacent (non-empty) groups, then our score is the su ...
- .Net后台获取客户端信息
1.获取浏览器版本号 /// <summary> /// 获取浏览器版本号 /// </summary> /// <returns></returns> ...
- JavaWeb(HTML +css+js+Servlet....)
注意 1.不要把函数命名为add(),不然容易和自带的冲突报错 2.是createElement 不要把create中的e写掉了 3.记得是getElementsByTaxName和getElemen ...
- Django 框架中定时触发脚本
方法一: Django搭建的服务器一般都用作WEB网站进行访问,通常的形式是用户访问网站或点击按钮发送请求,Django检测到请求后进行相应的试图函数处理后返回页面给用户. 但是,我们有时会需要有一些 ...
- Django + DRF + Elasticsearch 实现搜索功能
django使用haystack来调用Elasticsearch搜索引擎 如何使用django来调用Elasticsearch实现全文的搜索 Haystack为Django提供了模块化的搜索.它的特 ...
- 七,apache配置域名
配置域名服务器流程: (1)在httpd.conf中启用虚拟主机,Include conf/extra/httpd-vhosts.conf前面的#去掉. (2)在httpd.conf中修改项目路径为自 ...
- [bug] VUE 的 template 中使用 ES6 语法导致页面空白
如果你在 template 中,使用了 es6 及以上的语法,那么,在部分ios.安卓.微信浏览器中,打开页面后显示一片空白内容.如下: <ul id="example-1" ...
- yii2之前端资源引入
PS:因新项目后端使用yii2框架,不在使用纯html模板的方式搭建页面(前后端不分离模式)使用yii2的内置boostart封装模板,遂研究了一番yii2 通过yii2官方下载的基础文件结构 其中 ...
- WebDriverAPI(5)
将当前浏览器截屏 测试网址 http://www.baidu.com Java语言版本实例 @Test public void captureScreenInCurrentWindows() { dr ...