LeetCode每日一题:66. 加一 —— 元旦快乐,技术精进
LeetCode每日一题:66. 加一
祝各位技术爱好者元旦快乐,新的一年继续精进技术,万事胜意!
题目描述
给定一个非负整数数组 digits,代表一个非负整数。在整数的末尾加一,返回新的数组。
你可以假设除了数字 0 之外,这个数不会以 0 开头。
思路解析
解决这个问题的思路是从数组的最后一位开始加一,如果加一后该位数字小于10,则直接返回数组;如果加一后该位数字等于10,则将该位数字置为0,并向高位进一。如果最高位也进一,则需要新建一个数组,并将第一位设置为1,其余位设置为0。
代码实现
下面是使用Java语言实现的代码示例:
public int plusOne(int digits) {
for (int i = digits.length - 1; i >= 0; i--) {
if (++digits[i] <= 9) {
return digits;
}
digits[i] = 0;
}
int result = new int[digits.length + 1];
result[0] = 1;
return result;
}代码解释
for循环从数组的最后一位开始遍历,即从右向左遍历。- 在循环中,首先尝试将当前位数字加一,如果加一后该位数字小于10,说明不需要进位,直接返回当前数组。
- 如果加一后该位数字等于10,说明需要进位,将该位数字置为0,并继续向高位进位。
- 如果最高位也进一,则新建一个长度为原数组长度加一的数组,并将第一位设置为1,其余位设置为0,最后返回这个新的数组。
通过这种方式,我们可以有效地处理整数加一的问题,无论整数的大小如何,都能在O(n)的时间复杂度内完成操作。
希望这个解析能帮助大家更好地理解这个问题,也欢迎大家在评论区分享自己的见解和代码实现。祝大家新年快乐,学习进步!
评论已关闭