首页 > 其他分享 >66. 加一

66. 加一

时间:2024-12-18 21:58:39浏览次数:5  
标签:digits 10 加一 66 int 数组 进位

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

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

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

示例 1:

输入:digits = [1,2,3]
输出:[1,2,4]

解释:输入数组表示数字 123。

示例 2:

输入:digits = [4,3,2,1]
输出:[4,3,2,2]

解释:输入数组表示数字 4321。

示例 3:

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

解释:输入数组表示数字 9。
加 1 得到了 9 + 1 = 10。
因此,结果应该是 [1,0]。

class Solution {
    public int[] plusOne(int[] digits) {
        for (int i = digits.length - 1; i >= 0; i--) {
            digits[i]++;  // 1. 将当前位的数字加一
            if (digits[i] == 10) {  // 2. 如果加一后结果为 10
                digits[i] = 0;  // 将该位置为 0,并继续进位
            } else {
                return digits;  // 3. 如果没有进位,直接返回结果
            }
        }
        
        // 4. 如果循环结束,说明原数的每一位都产生了进位
        digits = new int[digits.length + 1];  // 5. 创建一个新的数组,长度比原数组多一位
        digits[0] = 1;  // 6. 新数组的第一个元素置为 1,其它位置自然是 0
        return digits;  // 7. 返回新的数组
    }
}

代码步骤解析

  1. 从末尾开始遍历
    • 我们从 digits 数组的最后一位(即最低位)开始逐步处理。这是因为我们要模拟加法操作,从个位开始加。
  2. 加一操作
    • digits[i]++ 将当前位的值加 1。如果加一后该位的值变为 10(即发生了进位),我们将当前位设置为 0,并继续处理上一位(即进位)。这就是通过 digits[i] = 0 来模拟进位。
  3. 判断是否有进位
    • 如果当前位加 1 后不等于 10(即没有进位),说明加法完成了,直接返回结果。
  4. 处理所有位都进位的情况
    • 如果遍历到最后一位仍然发生了进位(即每一位都变成了 0),那么我们需要在最前面新增一个 1,并将其余位设置为 0。这时就需要创建一个新的数组,长度比原数组多一位,并将 1 放在数组的最前面。

标签:digits,10,加一,66,int,数组,进位
From: https://www.cnblogs.com/drunkerl/p/18615919

相关文章

  • Take care of the water (7A_提高_P66)
    ImagineamassoffloatingwastethatistwicethesizeofthestateofTexas.Texashasalandareaofmorethan678,000squarekilometres.Soitmightbedifficulttoimagineanythingtwiceasbig.ThismassofwasteflowingintheNorthPacificOceani......
  • `['520', '888', '168', '66.6'].map(parseInt)`执行结果是多少?
    在JavaScript中,map函数会遍历数组中的每个元素,并对每个元素执行提供的函数,然后返回一个新数组,其中包含每次函数调用的结果。然而,parseInt函数的用法在这里有一些特殊之处,特别是当它与map函数一起使用时。parseInt函数通常有两个参数:要转换的字符串和基数(进制)。在map函数......
  • CSCI-GA.2662 Data Communications & Networks
    ComputerScienceDepartmentCourant Institute of Mathematical SciencesCourseTitle: DataCommunications&NetworksCourseNumber: CSCI-GA.2662-001Assignment 8: Final ProjectI. DueFridayDecember20,2024by 11:59pmEST.II. ObjectivesSoftwar......
  • 题解:AT_abc266_c [ABC266C] Convex Quadrilateral
    思路对于一个凸多边形,它的任意内角一定小于\(45\degree\)。如果每相邻两条边的叉积的符号相同就说明它们是顺时针或逆时针排列的,则可以判别出该四边形是否为凸四边形。AC代码#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;intX1,X2,X3,X4,Y1,Y2,Y3......
  • NLP界大牛讲Transformer自然语言处理的经典书!,466页pdf及代码
    《Transformer自然语言处理实战》本书涵盖了Transformer在NLP领域的主要应用。内容介绍:首先介绍Transformer模型和HuggingFace生态系统。然后重点介绍情感分析任务以及TrainerAPI、Transformer的架构,并讲述了在多语言中识别文本内实体的任务,以及Transformer模型生成......
  • 66 基于单片机的太阳能充电、温度检测、档位PWM调速系统
    所有仿真详情导航:PROTEUS专栏说明-CSDN博客目录一、主要功能二、硬件资源三、主程序编程四、资源下载一、主要功能        基于52单片机,采用DS18B20温度传感器检测温度,采用滑动变阻器连接ADC0832数模转换器模拟电量,采用L298N驱动电机转动。五个按键,第一按键......
  • 【每日一题】3266. K 次乘运算后的最终数组 I&II
    给你一个整数数组 nums ,一个整数 k  和一个整数 multiplier 。你需要对 nums 执行 k 次操作,每次操作中:找到 nums 中的 最小 值 x ,如果存在多个最小值,选择最 前面 的一个。将 x 替换为 x*multiplier 。k 次操作以后,你需要将 nums 中每一个......
  • coder666 P2903 - 整数幂
    题目oj: 登陆-徐工院·"周编一"计划题目:2903-整数幂考点:位运算  题目描述: 判断一个数是不是的整数幂,比如,所以输出“yes”,而无法表示成的整数幂形式,所以输出“no”输入: 输入一个正整数,在int范围以内输出: 如果是的整数幂,输出yes,否则,输出no样......
  • 力扣 3266. K 次乘运算后的最终数组 II
    发现\(k\le10^9\),肯定不能直接模拟了。但是注意到,如果最小值\(\min\timesm>\max\)存在,我们可以直接给每个数乘上\(m^{\lfloor\frac{k}{n}\rfloor}\),最后再处理剩下的\(k\bmodn\)个\(m\)即可,这个复杂度是\(O(n)\)的。具体地说,最小值乘上一个\(m\)超过最大值之后,其......
  • WordPress教程66集(全)
    WordPress教程66集(全)6小时https://www.bilibili.com/video/BV1AG4y1Q7sV/?spm_id_from=333.337.search-card.all.click&vd_source=d10c649e248b08f4441d8cd6b76f46fcwordpressAstrahttp://www.wp.com/wp-adminyoastseoElementorWebsiteBuilderEssentialAddonsfor......