力扣:加一

news2024/9/22 19:20:06

文章目录

  • 需求
  • 分析
  • 结尾

在这里插入图片描述


需求

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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, 我们用数学知识对其分析: 我们可以倒序遍历数组, 然后判断数组中的每一位值是否等于9, 如果等于 9 则将其值改为 0 , 继续. 如果不等于 9 那么 加1返回即可.

public int[] plusOne(int[] digits) {
    int length = digits.length;
    int index = length - 1;
    while( index >= 0 ){
        if( digits[index] == 9 ){
            digits[index--] = 0;
        }else{
        	//	不等于9
            digits[index] += 1;
            return digits;
        }
    }
    return digits;
}

执行出错了…

我们发现 参数 [9] 是通过不了的…

在这里插入图片描述

其实不光是 [9], 像 [ 9, 9], [9,9,9] 这样的数组内的元素全部是 9 的都不会通过的. 原因是 我们处理的过程中兵没有走分支判断的 下部分, 如下图:

在这里插入图片描述

解决办法也很简单, 我们发现如果数组中的所有值都是 9 的话, 都执行了分支语句的上个逻辑, 下个逻辑都没有执行, 这样就造成了一个结果: 数组中的值都变为 0 了, 这显然是不对的.

改进代码如下:

public int[] plusOne(int[] digits) {
    int length = digits.length;
    int index = length - 1;
    while( index >= 0 ){
        if( digits[index] == 9 ){
            digits[index--] = 0;
        }else{
        	//	不等于9
            digits[index] += 1;
            return digits;
        }
    }
    int[] arr = new int[length + 1];
    arr[0] = 1; 
    return arr;
}

解释代码:

public int[] plusOne(int[] digits) {
    int length = digits.length; // 获取数组的长度
    int index = length - 1; // 从数组的最后一个元素开始

    // 从数组的最后一个元素向前遍历
    while (index >= 0) {
        if (digits[index] == 9) { // 如果当前位是9
            digits[index--] = 0; // 当前位置设为0,并移动到前一位
        } else {
            // 如果当前位不是9
            digits[index] += 1; // 将当前位加1
            return digits; // 返回修改后的数组
        }
    }

    // 如果循环完成,说明所有的位都是9,例如 [9, 9, 9]
    int[] arr = new int[length + 1]; // 创建一个新数组,其长度比原数组多1
    arr[0] = 1; // 将新数组的第一位设置为1,其余位默认是0
    return arr; // 返回新数组
}

执行代码:

在这里插入图片描述


结尾

以上 是我对这道算法的一些遐想和延伸, 可能不是最优解, 但是算法的优化嘛 本身就是一个思索的过程, 能在这个思索和迭代的过程中有所收获和乐趣就是在成长了, 欢迎大家一起来交流更多的解答…

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

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

相关文章

C盘空间满了有什么招吗?

最好的答案就是Dism 第一步&#xff1a;下载软件 第二步&#xff1a;打开&#xff0c;如下&#xff1a; 第三步&#xff1a; 如何选择&#xff1f;如果不懂&#xff0c;就选默认就行了。 但是临时文件&#xff0c;就比较简单了&#xff0c;直接删除。

【前端】VUE动态引入组件 通过字符串动态渲染模板 动态生成组件

【前端】VUE动态引入组件 通过字符串动态渲染模板 应用场景&#xff1a; js增强 动态代码 扩展一类的 可以配合低代码平台等 灵活配置在线表单 在线列表等 适合灵活性 扩展性比较强的组件 VUE2 <template><div><textarea v-model"templateString"…

深度学习--时间序列预测方法总结

时间序列预测是分析和预测一系列时间顺序数据的方法。不同的时间序列预测方法在应用中根据数据特征和目标有不同的适用性。以下是时间序列预测方法的详细总结&#xff0c;包括概念、原理和Python实现代码。 1. 简单平均法 (Simple Average Method) 概念与原理&#xff1a; 简…

QT网络编程: 实现UDP通讯设置

目录 一.widget.ui界面设计 二.创建UDP通信 1.pro文件添加network模块。 2.添加对应头文件 3.定义槽函数&#xff0c;即与 UI 中的按钮点击事件相关联的函数 4.定义类的私有成员 5.关闭按钮 6.信息处理 7.绑定端口 8.发送信息 9.效果图 三.代码演示 1.widget.h 2.…

鸿蒙公共事件和通知

创建一个鸿蒙应用项目&#xff0c;在Index页面中创建一个按钮&#xff0c;点击该按钮&#xff0c;可以创建一个公共事件订阅者&#xff0c;可以订阅自定义公共事件&#xff08;事件名称为&#xff1a;“ncwu.harmonytest.event1”&#xff09;&#xff1b;创建一个Toggle组件&a…

解决 kill -9 PID 无法杀死 python 进程的问题:杀死 defunct 进程

文章目录 1. 一定要用 Ctrl C 结束程序2. 如何杀死后台僵尸 (defunct) 进程2.1 查看 defunct 进程2.2 杀死 defunct 进程的父进程 1. 一定要用 Ctrl C 结束程序 CtrlZ 和 CtrlC 都可以中断程序&#xff0c;但他们却有很大的差异&#xff0c;主要体现在&#xff1a; CtrlC: …

FSR超分笔记

最近因为工作原因&#xff0c;接触到了超分以及AMD家出的FSR算法&#xff0c;特意记录了解一下~ 前言 超分辨率是通过硬件或软件方法提高原有图像分辨率的方法&#xff0c;通过一幅或者多幅低分辨率的图像来得到一幅高分辨率的图像。 FSR是AMD提出的一种超分辨率方法&#x…

力扣面试经典算法150题:轮转数组

轮转数组 今天的题目是力扣面试经典150题中的数组的基础难度题&#xff1a;轮转数组。 题目链接&#xff1a;https://leetcode.cn/problems/rotate-array/description/?envTypestudy-plan-v2&envIdtop-interview-150 问题描述 给定一个整型数组 nums 和一个整数 k&…

微服务实战系列之玩转Docker(十一)

前言 在云原生的世界&#xff0c;经过十多年的进化&#xff0c;Docker已经形成了较完备的“后勤”保障服务和建立了荣辱与共的“密友圈”。用一句话可以概括&#xff1a;“Docker走遍天下&#xff0c;Swarm功不可没”。 因此&#xff0c;我们需尽可能做到对Swarm有充分的认识…

Java面试篇(多线程相关专题)

文章目录 0. 前言1. 线程基础1.1 线程和进程1.1.1 进程1.1.2 线程1.1.3 进程和线程的区别 1.2 并行和并发1.2.1 单核 CPU 的情况1.2.2 多核 CPU 的情况1.2.3 并行和并发的区别 1.3 线程创建的方式1.3.1 继承 Thread 类&#xff0c;重写 run 方法1.3.2 实现 Runnable 接口&#…

工业一体机在工业自动化控制领域的关键性作用

随着工业自动化技术的不断发展和应用范围的不断扩大&#xff0c;工业一体机作为一种集成了多种功能的自动化控制设备&#xff0c;在工业自动化控制领域扮演着越来越重要的角色。 一、 集成性强&#xff0c;简化系统架构 传统工业自动化控制系统通常由多个独立的设备组成&…

php7.1编译安装

1.安装必要的工具&#xff1a; 首先确保您已经安装了 Xcode 和 Command Line Tools&#xff1a;xcode-select --install2.下载 PHP 7.1 源代码&#xff1a; 访问 PHP 官方网站下载 PHP 7.1 的源代码&#xff1a; wget https://www.php.net/distributions/php-7.1.33.tar.gz t…

基于Java企业项目管理系统--论文pf

TOC springboot527基于Java企业项目管理系统--论文pf 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上…

指针详解(五)

目录 1. 回调函数 2. qsort使用举例 1&#xff09;排序整型数据 2&#xff09;排序结构数据 3. qsort函数的模拟实现&#xff08;冒泡&#xff09; 1. 回调函数 回调函数就是一个通过函数指针调用的函数 函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数…

【python】Python实现XGBoost算法的详细理论讲解与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

AI文字生成漫画短视频系统工具搭建部署,AI文生漫画短视频

目录 前言&#xff1a; 一、AI文生动漫小程序具有以下特点和功能&#xff1a; 二、文生动漫目前有哪些项目&#xff1f; 三、怎么搭建文生动漫小程序&#xff1f; 前言&#xff1a; AI文生动漫小程序是一款基于人工智能技术开发的动漫创作工具。它利用先进的机器学习算法&a…

大数据处理与智慧营销系统性能优化

随着企业数字化转型的加速&#xff0c;客户经营数字化正在向智能化方向发展&#xff0c;构建全场景、全流程、全触点的数字化、智能化的客户经营智慧营销体系。智慧营销系统已运行 5 年&#xff0c;伴随着业务增长&#xff0c;系统业务流程复杂度增大&#xff0c;大表数据量已超…

FreeSWITCH Record

1概述 FreeSWITCH https://signalwire.com/freeswitch是一个开源的电话交换平台。官方给它的定义是–世界上第一个跨平台的、伸缩性极好的、免费的、多协议的电话软交换平台。由这个定义我们可以得出以下几点: FreeSWITCH是跨平台的。它能原生地运行于Windows、MaxOSX、Linux、…

计算几何,CF 993A - Two Squares

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 A - Two Squares 二、解题报告 1、思路分析 由于数据量很小&#xff0c;可…

《Redis核心技术与实战》学习笔记5——内存快照RDB:宕机后,Redis如何实现快速恢复?

文章目录 给哪些内存数据做快照&#xff1f;快照时数据能修改吗?可以每秒做一次快照吗&#xff1f;小结 大家好&#xff0c;我是大白。 上篇文章记录了 Redis 避免数据丢失的 AOF 方法。这个方法的好处&#xff0c;是每次执行只需要记录操作命令&#xff0c;需要持久化的数据量…