LeetCode练习记录- 两数相加(kotlin)

Andorid Studio 实现两个随机数的加减乘除 首先将布局改为线性布局 我这里实现的是两个随机数的加法运算,其他运算只需将加法改为对应方法即可。 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:gravity="center_horizontal" android:la 阅读详情

题目描述

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

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

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

题目题解(kotlin)

解一:递归

代码源码

 private fun addTwoNode(l1: ListNode?, l2: ListNode?, hasExtra: Boolean): ListNode? {
            var resultNode: ListNode? = null
            if (l1 == null && l2 != null) {
                return if (hasExtra) {
                    resultNode = ListNode((l2.`val` + 1) % 10)
                    resultNode.next = addTwoNode(
                        null, l2.next,
                        l2.`val` + 1 >= 10
                    )
                    resultNode
                } else {
                    l2
                }
            }

            if (l2 == null && l1 != null) {
                return if (hasExtra) {
                    resultNode = ListNode((l1.`val` + 1) % 10)
                    resultNode.next = addTwoNode(
                       null, l1.next,
                        l1.`val` + 1 >= 10
                    )
                    resultNode
                } else {
                    l1
                }
            }

            if (l2 == null && l1 == null) {
                return if (hasExtra) ListNode(1) else null
            }


            var result = 0
            result = if (hasExtra) {
                (l1!!.`val` + l2!!.`val` + 1) % 10
            } else {
                (l1!!.`val` + l2!!.`val`) % 10
            }

            resultNode = ListNode(result)

            resultNode.next = addTwoNode(
                l1.next, l2.next, if (hasExtra) {
                    l1.`val` + l2.`val` + 1 >= 10
                } else {
                    (l1.`val` + l2.`val`) >= 10
                }
            )
            return resultNode
        }
    }

反思

代码写的很复杂也很冗余,思路不清晰,不停的在根据测试用例的错误结果去修正逻辑,最近看了递归的算法,就首先想到了用递归去做,做的很不理想,明天来优化一下这个递归的做法。

解二:循环

代码源码

class Sixteen2Test {

    companion object {
        @JvmStatic
        fun main(args: Array<String>) {
            val l1 = ListNode(2)
            val l1_1 = ListNode(4)
            val l1_2 = ListNode(3)

            l1.next = l1_1
            l1_1.next = l1_2

            val l2 = ListNode(5)
            val l2_1 = ListNode(6)
            val l2_2 = ListNode(4)

            l2.next = l2_1
            l2_1.next = l2_2

            addTwoNumbers(l1, l2)
        }

        fun addTwoNumbers(l1: ListNode, l2: ListNode): ListNode? {

            val headNode = ListNode(0)
            var p: ListNode? = l1
            var q: ListNode? = l2
            var result: ListNode? = headNode
            var flag: Int = 0 // 标志位:0:没有进位;1:有进位

            var pValue: Int
            var qValue: Int
            var sumValue: Int

            while (p != null || q != null) {
                pValue = p?.`val` ?: 0
                qValue = q?.`val` ?: 0
                sumValue = pValue + qValue + flag

                flag = sumValue / 10
                result?.next = ListNode(sumValue % 10)
                
                p = p?.next
                q = q?.next
                result = result?.next
            }

            if (flag > 0) {
                result?.next = ListNode(flag)
            }

            return headNode.next
        }
    }

}

反思

  • 反思:这道题在做的过程中,犯了一个错误,那就是没有将最原始的node节点保存下来
  • 直接对result进行操作,导致最后result指向了一个null的节点
  • 改进,headNode,将其赋值给result
  • 错误:其实这样子在操作result的时候也是在操作headNode,毕竟非基本类型,他们指向的存储数据的内存是同一块
  • 改进:用headNode去保存头节点,但是在操作的时候,将result的next作为一个被操作对象
  • 正确:将头节点保存完好,在需要打印的时候,只需要去除头节点即可,即将headNode的next进行return
AndroidAdditionApp:一个简单的用于将两个数字相加的Android应用程序 Android附加应用 一个简单的用于将两个数字相加的Android应用程序 本教程的源代码来自 。 立即下载

相关推荐

leetcode-answers-kotlin:LeetCode用Kotlin语言解决问题的方法

莱特Kotlin Leetcode解决方案采用Kotlin语言。

Android Studio:实现两个数相加的例子

2. 设计一个Android系统上的加法程序,让用户输入两个数,程序负责计算它们的和并显示出来。假设在xml布局文件中,两个文本框的id定义为“@+id/et_num1”和“@+id/et_num2”,按钮的id定义为“@+id/btn_add”,显示结果的文本的id定义为“@+id/tv_sum”。请你写出该程序中Activity类中的代码,不需要写xml布局文件。

FBJSSSSS的博客 2865

kotlin实现的简易计算器

kotlin实现的简易计算器

Leetcode-Solutions-Java-And-Kotlin:你的算法学习利器

Leetcode-Solutions-Java-And-Kotlin:你的算法学习利器 项目介绍 Leetcode-Solutions-Java-And-Kotlin 是一个专注于算法题解的开源项目,旨在帮助开发者提升数据结构和算法能力。项目由资深开发者维护,每周持续更新,涵盖了LeetCode、剑指Offer以及国内外大厂面试题的详细题解。每道题目都提供了Java和Kotlin两种语言的实现,并...

gitblog_00819的博客 416

Android实现两个数相加功能

主要为大家详细介绍了Android实现两个数相加功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

利用kotlin实现统计文件字符个数的方法示例

最近在学习kotlin,发现了一些不错的小技巧,所以下面这篇文章主要给大家介绍了关于利用kotlin实现统计文件字符个数的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。

Leetcode-Solutions-with-Java-And-Kotlin 使用教程

Leetcode-Solutions-with-Java-And-Kotlin 使用教程 1. 项目介绍 Leetcode-Solutions-with-Java-And-Kotlin 是一个开源项目,旨在提供 LeetCode 题目的解决方案,涵盖了多线程、数组、栈、队列、字符串、链表、树等多种数据结构和算法。每道题目都会用 Java 和 Kotlin 两种语言实现,并附有详细的解题思路、时间复...

gitblog_00176的博客 737

模型算力需求估算

(Billion Parameters,简称B)和训练/推理的计算任务复杂度,结合硬件计算能力(例如每秒浮点运算次数,FLOPS)来估算。以下是详细的方法和公式说明,以及实际的计算示例。算力需求的估算依赖于参数量、模型架构及硬件性能,结合训练/推理场景的特定要求来计算。通过上述公式和示例,我们可以定量分析不同任务的算力需求,并合理配置硬件资源以优化运行效率。结论:推理任务相对较轻,单台H100可以在30秒内完成此任务。推理算力需求一般远低于训练,因为只需要执行前向传播。,可以将训练时间缩短到约。

形上得其象,形下合于数;阴阳自济,玄理自明。 8952

android 数字加减动画,Android实现两个数相加功能

本文实例为大家分享了Android实现两个数相加的具体代码,供大家参考,具体内容如下要实现如图所示的加法计算器的话,还是比较简单的,下面直接上demo,有不懂的可以留言交流。1、下面是activity.xml的布局文件xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:la...

weixin_32891615的博客 1253

别再调PID了!用MATLAB/Simulink给四旋翼无人机搭个ADRC控制器(附完整仿真模型)

本文详细介绍了在MATLAB/Simulink环境中为四旋翼无人机搭建ADRC控制器的完整流程,包括核心原理、Simulink建模、参数调试技巧及与PID控制的性能对比。ADRC通过扩张状态观测器(ESO)有效提升无人机在复杂扰动下的控制性能,特别适合四旋翼无人机这类强耦合系统。文章还提供了完整的仿真模型和工程实践问题解决方案。

weixin_26808439的博客 381

openEuler Embedded新增软件包及在线安装软件方法

openEuler Embedded是基于Yocto构建的嵌入式操作系统,默认不包含dnf/apt软件包管理器,主要使用rpm格式。新增软件需通过manifest文件检查是否集成,未集成则需适配新配方。对于在线安装需求,可采用轻量级容器方案:通过isulad运行openEuler服务器版容器镜像,在容器内使用dnf命令安装软件(如Nginx),实现服务器生态兼容。部署前提包括设备支持、存储空间(≥10GB)和网络连接,需先安装并启动isulad服务。这种方法结合了嵌入式系统的轻量化特性和服务器系统的软件管理

专注嵌入式开发与 Linux 系统应用实战,分享芯片驱动、设备调试、系统工具开发干货。 1225

LeetCode14.最长公共前缀(Kotlin语言)

LeetCode14.最长公共前缀(Kotlin语言) 题目描述 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。 说明: 所有输入只包含小...

AI天才研究院 8639

【vue看板】

大屏看板提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:代码量较多,看板中的。

weixin_46223284的博客 2772

Java零基础入门实战指南:从环境配置到力扣算法通关

Java作为一门面向对象的编程语言,其核心在于通过类与对象的概念来模拟现实世界,实现代码的封装、继承和多态。理解Java基础语法、数据类型和流程控制是掌握编程逻辑的第一步,而环境配置则是实践的开始。对于开发者而言,JDK的安装与环境变量设置是运行Java程序的基石,选择OpenJDK等免费发行版能规避授权风险。掌握这些基础后,便能在力扣(LeetCode)等平台通过算法题巩固知识,将理论转化为解决实际问题的能力。例如,通过数组操作和循环结构完成“两数之和”等经典题目,不仅能提升编码技能,还能为应对大厂面试中

weixin_34239169的博客 437

vue2/3 - 详细对接海康监控实时视频预览和录像回放功能,vue接入使用海康视频监控播放器实时推流等功能,支持hik/rtsp/rtmp/hls/ws取流协议(详细教程与示例代码,一键复制开箱即用

vue2,vue3,海康,vue海康视频监控,海康开放平台,如何接入海康的实时监控,海康威视,Vue实现海康监控视频播放,vue3对接海康视频监控播放、回放的方法流程,实现海康H5视频插件播放视频的实例,web网页接入海康,海康威视的视频vue的录像回放和实时预览,前端vue3项目接入海康威视h5player.js播放器,vue2接入海康威视视频监控平台,使用海康监控H5视频播放,对接海康视频监控,海康视频web插件,web前端在vue中通过海康插件嵌入视频,实现实时预览,vue3海康监控播放器组件,vue

✅ 精选推荐文章 1万+

企业AI选型大揭秘:扣子(Coze) Bot与微信对话开放平台深度剖析

本文对比分析了字节跳动的扣子(Coze)Bot和腾讯的微信对话开放平台两款AI聊天机器人解决方案。扣子(Coze)Bot凭借强大的大模型支持、丰富的插件生态、低代码开发及多平台部署能力,在功能丰富度和灵活性方面表现突出,适合技术实力强、业务场景复杂的企业。微信对话开放平台则依托微信生态优势,在客户服务和营销推广场景中更具优势,其零门槛接入方式更适合技术能力较弱的企业。企业在选型时应综合考虑规模、预算、业务场景和技术能力等因素,选择最适合的AI解决方案,以充分发挥AI技术价值,提升企业竞争力。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 434

lc for kotlin

leetcode 第一题 给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/prob...

meishuang2306的博客 269

STM32 W5500 Freemodbus Modbus TCP协议功能实现

STM32F103VCT6 W5500(SPI1),实现Modbus-TCP协议的功能

坚韧与专注 2万+

LeetCode刷题记录

我是一名Android Developer,这里是我对Leetcode中文网中所出算法题目的解答记录。主要使用Java和Kotlin两种语言完成。题目按照网站中的题目序号排序,每题给出题目解答、相应难度和知识点,关键题目会给出解答思路笔记。由于题目较多,我会一点一点更新起来,欢迎fork和star☆! 很多人讲我们做移动端开发的属于工程范畴,对算法的要求不高。在面试来讲,算法只是一部分不代表全局...

weixin_33682719的博客 175

Winform从入门到精通(38)——StatusStrip(史上最全)

本文介绍StatusStrip控件的详细用法,包含所有属性和事件,绝对史上最全!

qq_34059233的博客 2758

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【leetcode】1001. 网格照明 代码优化记录

【leetcode】1001. 网格照明 代码优化记录 【Kotlin】代码优化记录——从二维到一维再到set 我太菜啦,这里记录一下自己思考的过程——如何从超内存再到超时最后到卡线过! 像我这样的菜狗都可以模拟的出来,没有做不出的困难题,只有懒惰不愿思考的人! 可能大家都有解题中 “开灯” “关灯” 的想法,但是如何将这些想法化简成为最终答案还是需要不断思考滴! 1、第一想法(超内存) 第一个想法就是直接模拟,模拟了10分钟,debug了20分钟… 模拟方式如下: class Solution {

woodwhale的博客 2464

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

LeetCode 36 有效的数独 java kotlin

题目 判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 上图是一个部分填充的有效的数独。 数独部分空格内已填入了数字,空白格用 ‘.’ 表示。 示例 1: 输入: [ [“5”,“3”,".",".",“7”,".",".",".","."], [“6”,".",".",“1”,“9”,“5”,".",".","."], [".

zheren8247的博客 350

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

三数之和(kotlin)

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]   第一反应是穷举...

琐忆 461

回溯算法的经典应用 —— LeetCode 51.N皇后问题(Kotlin)

回溯算法基于深度优先搜索算法。N皇后问题很好的体现了回溯算法的思想。

Alpinist Wang 624

使用Java+Kotlin双语言的LeetCode刷题之路(三)

BasedLeetCode LeetCode learning records based on Java,Kotlin,Python...Github 地址 序号对应 LeetCode 中题目序号 14 编写一个函数来查找字符串数组中最长的公共前缀字符串 Java 语言实现 public static String longestCommonPrefix(String[] str...

weixin_33774883的博客 122

力扣实训 _ [78].子集/回溯

力扣实训——子集/回溯法

Lsk_Smion的博客 400
上一篇: 总结项目编译遇到的几个问题(Android Studio Mac系统)
下一篇: JAVA名字正则表达式(包含新疆姓名)
丸子哒哒哒
博客等级 码龄12年 31粉丝 50原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值