首页 > 其他分享 >20241107,LeetCode 每日一题,使用 Go 计算两数相加

20241107,LeetCode 每日一题,使用 Go 计算两数相加

时间:2024-11-06 20:17:47浏览次数:5  
标签:ListNode nil 20241107 Next tail l2 l1 Go LeetCode

思路

  1. 模拟加法:链表存储的是逆序数位,因此从头节点开始,逐位相加可以模拟正常的加法。每两个节点的值相加,并记录进位。

  2. 逐节点相加

    • 创建一个新的链表,用于存储结果,每次将两个链表对应节点的值加上进位值,结果存储到新链表的节点中。
    • 计算过程中,将(l1.Val + l2.Val + carry)相加的结果拆成两个部分,一部分是当前位的值,另一部分是进位值(例如:(l1.Val + l2.Val + carry) / 10)。
  3. 处理进位:若最终计算完链表后进位不为0,则在结果链表末尾增加一个新节点表示进位。

  4. 边界条件:若链表长度不一,则将缺少的部分视为0;同时确保最后若存在进位,将其单独处理。

代码


type ListNode struct {
	Val  int
	Next *ListNode
}

func addTwoNumbers(l1 *ListNode, l2 *ListNode) (head *ListNode) {
	var tail *ListNode
	carry := 0
	for l1 != nil || l2 != nil {
		var val1, val2 int
		if l1 != nil {
			val1 = l1.Val
			l1 = l1.Next
		}
		if l2 != nil {
			val2 = l2.Val
			l2 = l2.Next
		}
		sum := val1 + val2 + carry
		sum, carry = sum%10, sum/10
		if head == nil {
			head = &ListNode{sum, nil}
			tail = head
		} else {
			tail.Next = &ListNode{sum, nil}
			tail = tail.Next
		}
		if l1 == nil && l2 != nil {
			tail.Next = l2
			break
		}
		if l1 != nil && l2 == nil {
			tail.Next = l1
			break
		}
	}
	if carry > 0 {
		tail.Next = &ListNode{carry, nil}
	}
	return
}

标签:ListNode,nil,20241107,Next,tail,l2,l1,Go,LeetCode
From: https://blog.51cto.com/u_12706362/12473803

相关文章

  • 浅析Mongodb注入
    前言不太会Mongodb的用法,这里学习一下简单介绍Mongodb是非关系型数据库(NoSQL),在MySQL中,我们所熟知的几个最常见的概念是数据库(Database)、表(Table)、字段(Column)、记录(Record)、索引(Index),这些术语映射到Mongodb中大概等价于数据库(Database)、集合(Collection)......
  • LeetCode100之接雨水(42)--Java
    1.问题描述        给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。        示例1输入:height=[0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1]表示的高度图,在这种情况下......
  • Leetcode刷题Python之3254.长度为K的子数组的能量值I
    提示:关于数组子问题的挑战,涉及能量值的计算。文章目录一、问题描述示例二、解题思路三、代码实现1.引入库2.代码解释总结一、问题描述给定一个长度为n的整数数组nums和一个正整数k,我们需要计算每个长度为k的子数组的能量值。能量值的定义如下:如果子数......
  • SciTech-BigDataAIML-Algorithm-Heuristic启发式- A *(Star) Algorithm(A星算法): To
    SciTech-BigDataAIML-Algorithm-Heuristic启发式A*(Star)Algorithm(A星算法):LossFunction:TotalCost="PastCost+PredicativeCost"MeasurementEuclidianDistance(欧几理得距离)\(\large\begin{array}{rl}\\EuDistance(Point_1,Point_2)&=\sqr......
  • SciTech-BigDataAIML-Algorithm-Heuristic启发式-
    SciTech-BigDataAIML-Algorithm-Heuristic启发式-LDA(LatentDirichiletAllocation)TopicsModel主题模型。LDA(LatentDirichiletAllocation,潜在狄利克雷分布)是一种TopicsModel(主题模型),用于在LargeScaleDocs(大量文档)自动发现HiddenTopics(隐藏主题)。在NLP和......
  • C# 使用mongodb 帮助类
    在C#中使用MongoDB,你需要安装MongoDB的C#驱动程序,通常使用MongoDB.Driver。以下是一个简单的帮助类,用于连接MongoDB数据库并执行基本的CRUD操作。首先,通过NuGet安装MongoDB.Driver:Install-PackageMongoDB.DriverusingMongoDB.Driver;usingSystem;usingSystem.Collectio......
  • 2529.正整数和负整数的最大计数(leetcode)
    https://leetcode.cn/problems/maximum-count-of-positive-integer-and-negative-integerclassSolution{publicintmaximumCount(int[]nums){//思路:由于数组非递减,考虑logn实现//因此可以有二段性可以二分//即寻找正数和负数的分界点t......
  • LeetCode每日一题--3254.长度为k的子数组的能量值I
    代码解释:初始化结果数组:ans初始化为-1,因为如果子数组不满足条件,其能量值即为-1。连续递增子序列长度计数:cnt用于记录当前连续递增子序列的长度。遍历数组:使用enumerate遍历nums,同时获取元素的索引i和值x。更新连续递增子序列长度:如果当前元素是数组的第一......
  • Google play用visa虚拟信用卡下单教程
    GooglePay是简单快捷的付款服务,方便在网站和商店等结账。无论预订旅游行程、出外用餐、购买表演门票或想尝试新的体验,都不用再掏出钱包了。在网上或应用程式开始使用非常简单,只需新增付款卡,即可轻松付款。它服务包括GooglePlay图书,GooglePlay游戏,GooglePlay影视,GooglePla......
  • 【LeetCode】移除链表中等于设定值的元素、反转链表
    主页:HABUO......