leetcode算法66.加一
👏👏👏
哈喽!大家好,我是【学无止境小奇】,一位热爱分享各种技术的博主!😍😍😍
⭐【学无止境小奇】的创作宗旨:每一条命令都亲自执行过,每一行代码都实际运行过,每一种方法都真实实践过,每一篇文章都良心制作过。✊✊✊
⭐【学无止境小奇】的博客中所有涉及命令、代码的地方,除了提供图片供大家参考,另外会在图片下方提供一份纯文本格式的命令或者代码方便大家粘贴复制直接执行命令或者运行代码。🤝🤝🤝
⭐如果你对技术有着浓厚的兴趣,欢迎关注【学无止境小奇】,欢迎大家和我一起交流。😘😘😘
❤️❤️❤️感谢各位朋友接下来的阅读❤️❤️❤️
一、leetcode算法
1、 加一
1.1、题目
定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 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.2、思路
思路一:本题我们对数据进行加1时要考虑如下几种情况;
情况一:数组最后一位不为9,那么我们就直接加1即可,例如【1,2,3】变为【1,2,4】,只需要修改一个数就可以了。
情况二:数组从后面数有至少一位为9,但并不全为9,这个时候需要从后面找到第一个不为9的数给他加1,然后把后面的9都变为0,例如【1,2,9,9】变为【1,3,0,0】,需要修改的数量取决于9的数量。
情况三:数组全部为9,这个时候需要进1位,需要生成一个新的数组,长度要大于原数组长度1位,并将第一位赋值为1,其余的都为0,例如【9,9,9】变为【1,0,0,0】,需要修改的数量取决于9的数量。
1.3、答案
class Solution {
public int[] plusOne(int[] digits) {
int n = digits.length;
//将数组逆序遍历
for(int i = n - 1; i >=0; i--){
//寻找第一个不为9的位置
if(digits[i] != 9){
//将不为9的位置的值加1
digits[i]++;
//并将加1后的值都变为0,类似于12999这种数,变化完就是13000
for(int j = i + 1; j < n; j++){
digits[j] = 0;
}
return digits;
}
}
//当digits中的所有元素都为9时,则定义一个比原数组多一位的数组,类似于999的数,变化完为1000
int[] ans = new int[n+1];
ans[0] = 1;
return ans;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
复杂度分析
时间复杂度:O(n),其中 n 是数组 digits 的长度。
空间复杂度:O(1)。返回值不计入空间复杂度。
文章来源: xiaoqijava.blog.csdn.net,作者:学无止境小奇,版权归原作者所有,如需转载,请联系作者。
原文链接:xiaoqijava.blog.csdn.net/article/details/122955539
- 点赞
- 收藏
- 关注作者
评论(0)