LeetCode题练习与总结:加一--66

一、题目描述

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。

示例 2:

输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。

示例 3:

输入:digits = [0]
输出:[1]

提示:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9

二、解题思路

  1. 首先,我们需要遍历数组的每一位数字,从最低位(数组的最后一个元素)开始。
  2. 对于每一位数字,我们将其加一。如果加一后的结果小于10,那么直接更新该位的数字,并且结束循环,因为我们已经完成了加一操作。
  3. 如果加一后的结果等于或大于10,说明发生了进位,我们需要将当前位的数字更新为0,并且继续处理下一位(即向前进位)。
  4. 如果在遍历完整个数组后,仍然有进位(即数组中所有的位都已经加一,且最后一个位加一后仍然等于或大于10),我们需要在数组的开头添加一个1,表示进位到了最高位。

三、具体代码

public class Solution {public int[] plusOne(int[] digits) {// 从数组的最后一个元素开始,向前遍历for (int i = digits.length - 1; i >= 0; i--) {// 如果当前位加一后小于10,直接更新并结束循环if (digits[i] < 9) {digits[i]++;return digits;} else {// 如果当前位加一后等于或大于10,发生进位digits[i] = 0; // 将当前位更新为0,并继续向前一位进位}}// 如果所有的位都已经加一,且仍然有进位,需要在数组开头添加一个1int[] result = new int[digits.length + 1];result[0] = 1; // 在新数组的第一个位置添加1return result;}
}

四、时间复杂度和空间复杂度

1. 时间复杂度
  • 该算法的主要操作是遍历整数数组的每一位数字,并对其进行加法操作。这个操作是线性的,即它与输入数组的长度成正比。
  • 遍历数组的时间复杂度为 O(n),其中 n 是数组 digits 的长度。
  • 由于在遍历过程中可能需要遍历整个数组,或者在最坏的情况下(即数组中的每个数字都是9)需要遍历整个数组并再进行一次操作(在数组前面添加一个新元素)。
  • 所以总的时间复杂度仍然是 O(n)。
2. 空间复杂度
  • 空间复杂度主要取决于存储操作的额外空间需求。
  • 在大多数情况下,我们只需要原始数组 digits 的空间来存储结果,因此空间复杂度为 O(n)。
  • 但是,在最坏的情况下,当数组中的每个数字都是9时,我们需要创建一个新的数组来存储结果(因为需要在数组前面添加一个1),这将导致额外的 O(n) 空间需求。
  • 因此,总的空间复杂度为 O(n)。

五、总结知识点

  1. 数组遍历:代码通过for循环从数组的最后一个元素开始向前遍历,这是处理类似数位加法问题时常用的方法。通过这种方式,我们可以逐位检查并更新数组中的每个数字。

  2. 进位处理:在加法运算中,如果某一位的加法结果超过了9(即等于或大于10),就需要进行进位处理。代码中通过检查当前位加一后是否仍小于9来判断是否需要进位。如果需要进位,就将当前位的值设为0,并继续处理下一位。

  3. 条件判断:代码中使用了if条件判断来检查当前位加一后是否需要进位。这是基本的控制流语句,用于根据不同的条件执行不同的代码块。

  4. 数组长度:代码中使用了digits.length来获取数组的长度,这是处理数组时常用的属性,用于了解数组中元素的数量。

  5. 数组更新:在代码中,直接在原数组上进行更新操作(即直接修改数组中的元素值)。这是一种原地修改(in-place modification)的做法,可以节省空间。

  6. 创建新数组:在所有位都为9且需要进位的情况下,代码创建了一个新的数组int[] result,并在开头添加了1。这是处理数组长度增加时的常用方法。

  7. 返回值:代码根据不同的情况返回不同的结果。如果能够在原数组上完成加法操作,则直接返回原数组;如果需要创建新数组,则返回新数组。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/816994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浏览器从输入url到渲染的过程

URL 解析&#xff1a; 当用户在浏览器地址栏输入 URL 时&#xff0c;浏览器会首先对 URL 进行解析。这个过程包括解析协议&#xff08;如 HTTP、HTTPS&#xff09;、域名、端口号和路径等信息。 DNS 解析&#xff1a; 把从输入的URL中解析出的域名发送给 DNS 服务器进行解析&a…

方案分享 | 嵌入式指纹方案

随着智能设备的持续发展&#xff0c;指纹识别技术成为了现在智能终端市场和移动支付市场中占有率最高的生物识别技术。凭借高识别率、短耗时等优势&#xff0c;被广泛地运用在智能门锁、智能手机、智能家居等设备上。 我们推荐的品牌早已在2015年进入指纹识别应用领域&#xff…

[dvwa] sql injection

sql injection 0x01 low sql语句没有过滤 经典注入&#xff0c;通过逻辑or为真相当于select * from users where true&#xff0c;99换成1也成 用union select 对齐列数&#xff0c;查看数据库信息 1’ union select 1,2# order by探测对齐列数更方便 1’ or 11 order b…

Python数据挖掘项目开发实战:处理作者归属问题

注意&#xff1a;本文下载的资源&#xff0c;与以下文章的思路有相同点&#xff0c;也有不同点&#xff0c;最终目标只是让读者从多维度去熟练掌握本知识点。 Python数据挖掘项目开发实战&#xff1a;处理作者归属问题 一、项目背景与目标 在出版、科研等领域&#xff0c;确定…

05.MySQL索引事务

1. 索引 1.1 概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。 可以对表中的一列或多列创建索引&#xff0c;并指定索引的类型&#xff0c;各类索引有各自的数据结构实现 1.2 作用 数据库中的表、数据、索引之间的关系&#xff0c;类似于书架上的…

Spring AI 应用 - 智能记者

参考实现&#xff1a; https://github.com/mshumer/ai-journalist 上面是通过 Claude 配合 SERP 搜索 API&#xff0c;使用 Python 语言实现的&#xff0c;本文通过 GitHub Copilot 辅助改为了基于 Spring AI 的 Java 版本&#xff0c;本文使用的 OpenAI。 AIJournalist 实现…

Tomcat源码解析——源码环境搭建

一、源码下载 在进行源码阅读前&#xff0c;先下载源码包&#xff0c;这样便于做笔记和debug。 我所用的版本是Tomcat7.0.68&#xff0c; Tomcat7.0.68下载地址&#xff1a;Index of /dist/tomcat/tomcat-7/v7.0.68/src 所有Tomcat的源码包下载地址&#xff1a;Index of /dist/…

第6章:6.4.2 案例二:爬取成语网站数据 (MATLAB入门课程)

讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 本案例用到的网址为&#xff1a;成语大全列表成语大全列表https…

FFmpeg:自实现ijkplayer播放器--11音视频同步

文章目录 音视频同步时钟结构时间api实现过程音视频同步 音视频同步采用以音频为基准的方式,使用时间轴作为参考 如部分音频数据解不出来时,计算音频的pts(时间戳)与时间轴的差值,视频时间为差值加上时间轴,使得时间戳和音频一样 时间轴统是通过av_gettime_relative()获取…

c语言如何理解指针的指针?

1.啥叫指针&#xff1f; 在C语言中&#xff0c;指针是一个非常重要的概念。指针本质上是一个变量&#xff0c;它的值不是数据本身&#xff0c;而是存储数据的内存地址。指针允许程序直接访问和操作内存中的数据&#xff0c;这在很多情况下非常有用&#xff0c;比如在处理数组、…

NSA发布《在数据支柱中推进零信任成熟度》报告

4月9日&#xff0c;美国国家安全局&#xff08;NSA&#xff09;发布了题为《在数据支柱中推进零信任成熟度》的报告&#xff0c;旨在于数据安全层面提供指导&#xff0c;以增强数据整体安全性并保护静态和传输中的数据。(如下图&#xff09; 一、主要内容 报告中的建议侧重于将…

企业电子招标采购系统源码之从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理

功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查看所…

ChatGPT在线网页版

ChatGPT镜像 今天在知乎看到一个问题&#xff1a;“平民不参与内测的话没有账号还有机会使用ChatGPT吗&#xff1f;” 从去年GPT大火到现在&#xff0c;关于GPT的消息铺天盖地&#xff0c;真要有心想要去用&#xff0c;途径很多&#xff0c;别的不说&#xff0c;国内GPT的镜像…

AcWing 897 最长公共子序列

给定两个长度分别为 NN 和 MM 的字符串 AA 和 BB&#xff0c;求既是 AA 的子序列又是 BB 的子序列的字符串长度最长是多少。 输入格式 第一行包含两个整数 NN 和 MM。 第二行包含一个长度为 NN 的字符串&#xff0c;表示字符串 AA。 第三行包含一个长度为 MM 的字符串&…

Linux:Redis7.2.4的源码包部署(2)

本章使用的是centos9进行部署 1.获取rpm安装包 Index of /releases/ (redis.io)https://download.redis.io/releases/这个网站有历史的版本&#xff0c;我这里使用的是最新版7.2.4进行安装 点击即可进行下载 方进Linux中&#xff0c;如果你的Linux中可以直接使用wget去下载 2…

SQLite、MySQL 和 PostgreSQL 数据库速度比较(本文阐述时间很早比较,不具有最新参考性)(二十五)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;用于 SQLite 的异步 I/O 模块&#xff08;二十四&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 注意&#xff1a;本文档非常非常旧。它描述了速度比较 SQLite、MySQL 和 PostgreSQL 的古老版本。 这里…

系统架构最佳实践 -- 供应链系统架构

供应链系统是现代企业管理中不可或缺的一部分&#xff0c;它涉及到从原材料采购到产品销售的整个生产流程。一个高效的供应链系统可以帮助企业实现成本控制、库存优化和客户满意度提升等目标。在本文中&#xff0c;我们将讨论供应链系统的设计与实践。 一、供应链系统设计 业务…

程序员与资产的关系

资产最直接且有效的获取方式通常是通过购买。然而&#xff0c;优质的资产并不总是在市场上出售&#xff0c;即便有&#xff0c;我们也可能负担不起。 除了购买&#xff0c;其实还有一种逐渐被人遗忘的方式——那就是直接“创造资产”。对于许多传统行业的从业者来说&#xff0…

如何用 Python 批量循环读取 Excel ?

在使用 Python 批量处理 Excel 时经常需要批量读取数据&#xff0c;常见的方式是结合glob模块&#xff0c;可以实现将当前文件夹下的所有csv批量读取&#xff0c;并且合并到一个大的DataFrame中 df_list [] for file in glob.glob("*.csv"):df_list.append(pd.read…

【C++】List容器(1)-STL标准库-List举例说明-定义和初始化-成员函数的使用-运行效率对比-链接数据结构-和顺序表的对比

C学习&#xff1a;list容器详解&#xff08;一&#xff09; 1.STL标准库 C Standard Template Library&#xff08;STL&#xff09;是C编程语言的一个库&#xff0c;它提供了一系列模板化的数据结构&#xff08;比如向量、列表、队列等&#xff09;和算法&#xff08;比如排序…