66-加一(PlusOne)

news/2024/11/9 9:37:48/

大家好,我是anonymousC,一个算法小白0.0。

题目描述

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

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

你可以假设除了整数 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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/plus-one

问题总结

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

问题分析

情况一:无进位(即最后一位小于9)如:[1,2,3,8] ==> [1,2,3,9]这种情况直接将最后一位加一就好了。
情况二:有进位i. 第一位不进位(即最有一位(或其他位置都为9)是9,但第一位小于9)如:[6,7,8,9] ==> [6,7,9,0][6,9,9,9] ==> [7,0,0,0]ii. 所有位都进位(即所有位置都为9)此时要扩大数组的大小(数字大小要加一)如:[9,9,9,9] ==> [1,0,0,0,0]

思路总结

我们可以从最后一位先开始进行加一,再判断是否有进位,若无进位则可以直接返回这个数组,若有进位,我们将该位值改为0,重复以上步骤。

步骤如下:

1.从最后一位先开始进行加一
2.判断是否有进位
3.若无进位则可以直接返回这个数组
4.若有进位,我们将该位值改为0,再重复以上步骤,直到最后依然没有返回数组,说明所有位置都发生了进位,即我们需要对数组长度进行加1,并且将数组的第一个值设置为1

JAVA代码

class Solution {public int[] plusOne(int[] digits) {// 从最后开始遍历for (int i = digits.length - 1; i >= 0; i--){digits[i]++; // 进行数字 + 1digits[i] %= 10; // 若有进位,则除10取余为0if (digits[i] != 0) { // 判断是否有进位return digits;  // 若没有进位,则返回}  }// 若for里面没有返回,则说明都发生了进位digits = new int[digits.length + 1]; // 数组长度加一digits[0] = 1;  // 将第一位赋值为1return digits;  // 返回数组}
}

LeetCode通过情况

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VryT1zgt-1618721059569)(../../../../../Tools/Typora/images/image-20210418123953941.png)]

复杂度

时间复杂度: O(n) n为数组的长度

空间复杂度: O(1)

代码优化

欢迎大家给我提供更好的思路,可以给我评论or私信我,感谢您们,感谢您们的支持!


http://www.ppmy.cn/news/461846.html

相关文章

加6位操作(Java)

package spurs_ping; import java.util.Scanner; /*中国人非常喜欢6这个数字,因为大家总爱说66大顺.数学狂人李某人喜欢把什么都数字化,于是 她把顺利这个词也定义了数量级,6代表1级顺利, 66代表2级顺利,666代表3级顺利,以此类推.你看,数学狂人的世界总是让人无法理解.今天,李…

66 加一

题目描述&#xff1a; 给定一个由整数组成的非空数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 示例 1: 输入: [1,2,3] 输出:…

C语言数组指针加1的问题

目录 1. 用C语言测试 2. 用汇编语言测试(MASM环境) 指向数组的指针存储的是连续的内存地址&#xff0c;而内存地址的最小编址单位是1字节&#xff0c;如果存储的数据本身移动几个字节&#xff0c;则内存地址也相应地移动几个字节。而数组指针的加1移动几个字节&#xff0c;取…

指针+1,怎么加?

指针1 指针&#xff0b;1&#xff0c;是加一个单元格还是加一个字节呢&#xff0c; 先看一个程序&#xff1a; #include <stdio.h> int main() {int arr[] {1,2,3,4,5,6,7,8,9,10};int *p arr;p;//p p 1*p 10;p;*p 20;printf("%d,%d\n",arr[0],arr[1])…

指针加1

日常生活中我们常用的计算是加减乘除&#xff0c;那么对于指针来说&#xff0c;它却只有加减运算 首先我们先讨论指针加一是怎么加的 可以参考下列代码 int main() {int arr[10] {0,1,2,3,4,5,6,7,8,9};int *p arr;//将数组arr[0]的地址赋给指针变量pprintf("%d\n"…

6-1

今天是儿童节&#xff0c;本来打算晚上去参加一个朋友聚会的&#xff0c;结果身体不舒服&#xff0c;就没去&#xff0c;好遗憾 1.继续联调通知GM的功能 2.要细心&#xff0c;耐心&#xff0c;遇到问题不要慌&#xff0c;耐心查找问题&#xff0c;出了问题很正常。 业务熟悉…

1-6

#include <stdio.h> int main() { int a100 ; float b3.14f ; char cC ; printf("a%d\n",a); printf("b%.2f\n",b); printf("c%c\n",c); return 0 ; }

【2023-1-6】沟通加风险 每日5题

沟通加风险 每日5题 1.项目经理发现一名新的团队资源不具备完成分配给其角色所需的技能。项目经理应该做什么? The project manager finds that a new team resource does not have the skills required to complete the job assigned to him. What should the project manag…