leetcode12 Plus One

Given a non-empty array of digits representing a non-negative integer, plus one to the integer.

The digits are stored such that the most significant digit is at the head of the list, and each element in the array contain a single digit.

You may assume the integer does not contain any leading zero, except the number 0 itself.

Example 1:

Input: [1,2,3]
Output: [1,2,4]
Explanation: The array represents the integer 123.
Example 2:

Input: [4,3,2,1]
Output: [4,3,2,2]
Explanation: The array represents the integer 4321.

题目意思:给你一个非空的int型数组,代表了一个非负的整数,给数值加1,存储数字使得最高有效数字位于列表的开头(The digits are stored such that the most significant digit is at the head of the list这句话没有很理解,希望有大佬可以给我说一下具体含义),在数组中每一个元素都包含一个数字。你可以假设数字是不包含有前置0,但是除了0本身自己。

下面是两个例子:给了一个数组[1,2,3],然后给该数组的最后一个元素加1,新数组就是[1,2,4]。
特别需要注意的是,题目中说明了一个0的问题,所以产生0的情况就是给数字9进行加1,所以一定要特殊处理一个9作为最后一位的情况

思路:
(1)从数组的最后一个元素开始循环,判断一下该数字是否小于9,
(2)如果最后一个数字值小于9,那么就给该数字加1,然后直接返回给数组
(3)如果最后一个数字大于等于9,那么就要把这个数字的值设为0,并且把前一个元素的值加1,然后返回该数组。
(4)如果只传进了一个数字9,那么该数值的地方需要设置为0,且原有的数组长度需要加1,然后将第一个元素设置为1.

实现代码如下所示:

class Solution {
    public int[] plusOne(int[] digits) {
         if(digits == null || digits.length == 0){
            return new int[0];
        }
        int len = digits.length;
        for(int i = len - 1; i >= 0; i--){
            if(digits[i] < 9){
                digits[i] = digits[i] + 1;
                return digits;
            }else{
                digits[i] = 0;
            }
        }

        int[] result = new int[len + 1];
        result[0] = 1;
        return  result;
    }
}

运行结果:

Runtime: 0 ms, faster than 100.00% of Java online submissions for Plus One.
Memory Usage: 37.5 MB, less than 5.64% of Java online submissions for Plus One.

别人的code:

public int[] plusOne(int[] digits) {
    for (int i = digits.length - 1; i >=0; i--) {
        if (digits[i] != 9) {
            digits[i]++;
            break;
        } else {
            digits[i] = 0;
        }
    }
    if (digits[0] == 0) {
        int[] res = new int[digits.length+1];
        res[0] = 1;
        return res;
    }
    return digits;
}

思路:也是倒着循环数组,因为只需要看最后一位数字,对于9进行处理就可以了,
如果不等于9,那么最后一个数字+1,然后返回数组;如果大于等于9,那么就直接最后一个元素赋值为0,此时就需要判断一下第一位是不是0,如果是0,那么就说明是一个9单独加1,所以数组的长度应该加1,且第一个元素应该置为1.

这道题总的来说不是很难,但是对于题的理解很重要,不要忽略每种情况的处理就基本不会有问题。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值