菜鸡每日一题系列打卡66天
每天一道算法题目
小伙伴们一起留言打卡
坚持就是胜利,我们一起努力!
题目描述(引自LeetCode)
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位,数组中每个元素只存储单个数字。
你可以假设除了整数0之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
题目分析
本题是一道关于数组的简单题,只需要反向遍历数组,并注意进位处理即可。
话不多说,上代码!
代码实现
class Solution {
public int[] plusOne(int[] digits) {
int length = digits.length - 1;
// 遍历数组
while (length >= 0) {
// 不再产生进位时直接返回
if (++digits[length] < 10) return digits;
// 产生进位时当前位取模,继续遍历
digits[length--] %= 10;
}
// 进位溢出时扩展数组
digits = new int[digits.length + 1];
// 设置首位为1
digits[0] = 1;
// 返回结果
return digits;
}
}
代码分析
对数组最多进行了一次遍历,时间复杂度为O(n)
不发生进位溢出时,空间复杂度为O(1)
发生进位溢出时,空间复杂度为O(n)
执行结果
学习 | 工作 | 分享
????长按关注“有理想的菜鸡”
只有你想不到,没有你学不到