小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
题目
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例
输入: digits = [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
输入: digits = [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
输入: digits = [0]
输出: [1]
提示
1 <= digits.length <= 100
0 <= digits[i] <= 9
解题思路
要给一个整数加一,那不可避免的会涉及到进位的问题,对于个位数小于9
的整数,可以直接加一返回结果。
个位数等于9
的场景又分为两种情况:
- 十位数及其以上有小于
9
的数字 - 十位数及其以上均由数字
9
组成
对于第一种情况,我们只需要往前遍历,逐步进位到有小于9
的数字,加一后直接返回结果即可。
第二种情况则需要新建一个数组,将首位数字改成1
,其余位数默认值为0
。
代码实现
class Solution {
public int[] plusOne(int[] digits) {
int idx = digits.length - 1;
// 先将个位数加一
++digits[idx];
// 往前遍历,逐位进位
while(idx > 0 && digits[idx] == 10){
digits[idx] = 0;
++digits[--idx];
}
// 判断首位元素是否需要进位
if(digits[0] == 10){
// 新建一个原数组长度 +1 的数组,修改首位元素值后返回结果
int[] ans = new int[digits.length + 1];
ans[0] = 1;
return ans;
}
return digits;
}
}
复杂度分析
- 时间复杂度:
- 空间复杂度:
最后
文章有写的不好的地方,请大佬们不吝赐教,错误是最能让人成长的,愿我与大佬间的距离逐渐缩短!
如果觉得文章对你有帮助,请 点赞、收藏、关注、评论 一键四连支持,你的支持就是我创作最大的动力!!!