首页 > 其他分享 >每日一练 两数相加问题(leetcode)

每日一练 两数相加问题(leetcode)

时间:2024-03-30 16:01:27浏览次数:20  
标签:ListNode val 相加 leetcode l2 l1 next 每日 进位

原题如下:

这道题目是一道链表题,我们对于这种链表类,很显然我们最后输出的是初始节点,所以我们要保留我们的初始头指针,那么我们的第一步一定是把头指针保留一份,然后再让头指针往后进行操作。那么我们进行什么操作呢,很简单,就是把l1和l2的对应内容加起来就行了,那么我们就面临这样几个问题。

第一,加的太“多”了,什么叫加多了呢,就是我们的和超过9了,这样的话显然我们要进行进位,我们进位后的那个数等于什么呢?显然是等于我们的和取余10,那么怎么表示我们后面一个要进位加1呢?我们可以再做一个进位指针,标记为0时表示没有进位,为1时表示已经进位(显然我们这里只能是进1)。那么我们之后的和其实等于l1+l2+进位指针的值,综合起来我们一开始把进位指针设为0,那么我们所有的和都可以为l1+l2+进位指针的值。

第二,加的太“少”了,什么意思呢?就是当l1和l2为空值的时候,我们是拿不到我们的val值的,所以这个时候我们人工设为0.

第三,l1和l2都为null,我们还要进位1,这个时候怎么办呢?显然我们只需要把我们的答案输出链表末尾加上一个1即可。

以下是代码(java)实现:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode answerpre = new ListNode(0) ;
        ListNode answer = answerpre ;
        int jinzhi = 0 ;
        while(l1 != null || l2 != null){
            int x = l1 == null ? 0 : l1.val ;
            int y = l2 == null ? 0 : l2.val ;
            int ans = x + y + jinzhi ;
            jinzhi = ans/10 ;
            ans = ans % 10 ;
            answer.next = new ListNode(ans) ;
            answer = answer.next ;
            if(l1 != null){
                l1 = l1.next ;
            }
            if(l2 != null){
                l2 = l2.next ;
            }
        }
        if( jinzhi == 1 ){
            answer.next = new ListNode(1) ;
            answer = answer.next ;
        }
        return answerpre.next ;
    }
}

标签:ListNode,val,相加,leetcode,l2,l1,next,每日,进位
From: https://blog.csdn.net/2403_83073833/article/details/137156869

相关文章

  • openGauss每日一练(全文检索)
    openGauss每日一练(全文检索)本文出处:https://www.modb.pro/db/224179学习目标学习openGauss全文检索openGauss提供了两种数据类型用于支持全文检索。tsvector类型表示为文本搜索优化的文件格式,tsquery类型表示文本查询课后作业1.用tsvector@@tsquery和tsquery@@......
  • openGauss每日一练第四天
    openGauss每日一练第四天本文出处:https://www.modb.pro/db/193083学习地址https://www.modb.pro/course/133学习目标学习openGauss创建角色、修改角色属性、更改角色权限和删除角色角色是用来管理权限的,从数据库安全的角度考虑,可以把所有的管理和操作权限划分到不同的角......
  • openGauss每日一练第三天
    openGauss每日一练第三天本文出处:https://www.modb.pro/db/193083学习目标学习openGauss创建数据库、修改数据库属性和删除数据库课后作业1.分别创建名为tpcc1和tpcc2的数据库SQL文本:createdatabasetpcc1;createdatabasetpcc2;\lomm=#createdatabasetpcc1......
  • LeetCode Python - 80. 删除有序数组中的重复项 II
    目录题目描述解法运行结果题目描述给你一个有序数组nums,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。说明:为什么返回......
  • python每日练(二)
    1:九九乘法表foriinrange(1,10):forjinrange(1,i+1):print("%d*%d=%d"%(i,j,i*j),end='')print()通过两个for循环嵌套使用调用乘法的因子,最后的print()是为了让输出的结果美观,因为print()自带换行的功能。1*1=12*1=22*2=43*1=33*2=63*3=9......
  • leetcode-面试经典150题-42-接雨水(双指针c++)
    第一遍做的时候(没有看题解)我想到的思路就是遍历每一个凹下去的部分,计算能接到的雨水数量,然后累加,left,right分别是凹点的左右边界下面是代码:classSolution{public:inttrap(vector<int>&height){intn=height.size();intans=0;for(int......
  • LeetCode刷题记录——day8
    https://leetcode.cn/problems/spiral-matrix/description/?envType=study-plan-v2&envId=2024-spring-sprint-100注意每次改变边界都有判断一次classSolution{public:vector<int>spiralOrder(vector<vector<int>>&matrix){vector<int&g......
  • 完数,一个数恰好等于它的因子相加
    示例:6=1+2+3方法:找到num的所有因子,相加后检查是否等于num,如果等于,则按照相应格式输出。找出1000以内的完数。代码:#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){intn,i,sum=0,num,count=0;inta[10];intj;for(j=2;j<......
  • Leetcode 长度最小的子数组
    Day13第一题超出运行时间,两层循环classSolution{publicintminSubArrayLen(inttarget,int[]nums){if(Arrays.stream(nums).sum()<target){return0;}intminSubArrayLen=nums.length;OUT:......
  • 每日面经分享(SpringBoot part4:Controller层)
    SpringBootController层的作用a.请求映射:Controller层使用注解(如@RequestMapping、@GetMapping、@PostMapping等)将HTTP请求映射到相应的方法上。这些方法根据URL路径、请求方法、请求参数等来决定要执行的操作。b.参数解析:Controller层负责解析HTTP请求中的参数(如路径......