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;
    }

代码解释

  1. for循环从数组的最后一位开始遍历,即从右向左遍历。
  2. 在循环中,首先尝试将当前位数字加一,如果加一后该位数字小于10,说明不需要进位,直接返回当前数组。
  3. 如果加一后该位数字等于10,说明需要进位,将该位数字置为0,并继续向高位进位。
  4. 如果最高位也进一,则新建一个长度为原数组长度加一的数组,并将第一位设置为1,其余位设置为0,最后返回这个新的数组。

通过这种方式,我们可以有效地处理整数加一的问题,无论整数的大小如何,都能在O(n)的时间复杂度内完成操作。

希望这个解析能帮助大家更好地理解这个问题,也欢迎大家在评论区分享自己的见解和代码实现。祝大家新年快乐,学习进步!

标签: none

评论已关闭