每日一道算法题015 加一

719 阅读1分钟

题目

leetCode 第 66 题,加一 关联类型:数组

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 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 <= digits.length <= 100
0 <= digits[i] <= 9

做题时间

class Solution {
    public int[] plusOne(int[] digits) {
        
        
        
        
    }

}

以上给出方法输入参数,完成作答。

题目分析

  1. 解这个题就和小学学数学的感觉是一样的,逢十进一,否则在该位置加一即可
  2. 所以可以写个递归方法,从最后一位开始,逢十进一,下标减一继续调用,否则加一返回数组
  3. 临界条件为当前位置不存在逢十进一,直接返回;或者当前下标为 0 ,则创建新数组,首位置 1 返回

解答分析

本文只分析本人做题思路,仅供参考,了解一种解题思想,其他各种做题思路请上网查阅。

解答成功:
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:36.9 MB,击败了53.68% 的Java用户

class Solution {
    public int[] plusOne(int[] digits) {
        //调用递归方法
        return plusEveryOne(digits, digits.length - 1);
    }
    //传入数组及当前下标
    public int[] plusEveryOne(int[] nums, int index) {
        //如果当前位置不为 9 ,则不满足逢十进一,则加一返回
        if (nums[index] != 9) {
            nums[index] += 1;
            return nums;
        } else {
            //如果当前位置为 9 ,但不是首位,则当前为置 0,下标减一,递归调用
            if (index != 0) {
                nums[index] = 0;
                index--;
                return plusEveryOne(nums, index);
            } else {
            //如果当前位置为 9 且为首位,则新建数组,首位置 1 返回
                int[] res = new int[nums.length + 1];
                res[0] = 1;
                return res;
            }
        }
    }

}