算法创作 | 两数相加问题解决方法

简介: 算法创作 | 两数相加问题解决方法


问题描述

给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:2->4->3

     5->6->4

     7->0->8

输入:l1 = [2,4,3], l2 = [5,6,4]

输出:[7,0,8]


解决方案

首先,我们先建立节点类,再根据题意进行具体问题具体分析。因为每位数字是按照逆序的方式,所以在对应位置节点值相加后因向右进1。另外是考虑链表长度,较长链表多出的节点值就不用加另一链表的节点值(因为另一链表本生也不存在对应节点)。最后还要考虑两链表逆序相加后末端的节点值是否还要进1,若要进1,则在建立一个带元素1的节点,并将其连接在新链表的末端。

代码清单 两数相加 问题Python代码

class ListNode:

    def __init__(self,val):

        self.val = val

        self.next = None

class Solution:

    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:

        headNode = ListNode(0)

        head = headNode

        carryNum = 0

        while l1 and l2:

            l1_val = l1.val

            l2_val = l2.val

            newVal = l1_val + l2_val + carryNum

            yushu = (l1_val + l2_val) % 10

            carryNum = (l1_val + l2_val) // 10

            l1.val = yushu

            head.next = l1

            head = l1

            l1 = l1.next

            l2 = l2.next

        while l1:

            l1_val = l1.val

            newVal = l1_val + carryNum

            yushu = l1_val % 10

            carryNum = l1_val // 10

            l1_val = yushu

            head.next = l1

            head = l1

            l1 = l1.next

        while l2:

            l2_val = l2.val

            newVal = l2_val + carryNum

            yushu = l2_val % 10

            carryNum = l2_val // 10

            l2_val = yushu

            head.next = l2

            head = l2

            l2 =l2.next

        if carryNum == 1:

            head.next = ListNode(1)

 

        return headNode.next

 

 



结语

本文是关于链表逆序相加并产生一个新链表的操作,其中涉及到类的知识以及对问题的具体问题具体分析的能力。不过链表相关问题的代码表达还有很大的欠缺,需要多多理解代码的含义,然后熟练使用。

目录
相关文章
|
存储 算法 程序员
【五一创作】C++程序设计与算法(一) 北京大学 郭炜(下)
【五一创作】C++程序设计与算法(一) 北京大学 郭炜(下)
60 0
|
算法 Java C语言
【五一创作】C++程序设计与算法(一) 北京大学 郭炜(上)
【五一创作】C++程序设计与算法(一) 北京大学 郭炜
100 0
|
7月前
|
算法 Java
Java数据结构与算法:冲突解决方法
Java数据结构与算法:冲突解决方法
|
算法 Python
算法创作|规则数列计算解决方法
算法创作|规则数列计算解决方法
78 2
|
算法
算法创作|神奇语言问题解决方法
算法创作|神奇语言问题解决方法
75 1
|
算法 索引
算法创作 | 0到n-1中缺失的数字问题解决方法
算法创作 | 0到n-1中缺失的数字问题解决方法
105 0
|
算法 Python
算法创作|找出游戏的获胜者问题解决方法
算法创作|找出游戏的获胜者问题解决方法
157 0
|
11天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
145 80
|
4天前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
|
7天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-GRU-SAM网络在时间序列预测中的应用。算法通过卷积层、GRU层、自注意力机制层提取特征,结合粒子群优化提升预测准确性。完整程序运行效果无水印,提供Matlab2022a版本代码,含详细中文注释和操作视频。适用于金融市场、气象预报等领域,有效处理非线性数据,提高预测稳定性和效率。

热门文章

最新文章