LeetCode 66:加一

题目:

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。

示例 2:

输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

解题思路:

我们初看这个题,可以从题中可以得出的条件为:由整数组成、非空数组、非负整数、该数加一、最高位数字存放在数组的首位、数组中每一个元素只存储单个数字。
通过这些条件,我们可以推出一些有用的东西。
分析:该数加一是什么意思呢,根据示例我们知道它是把数组看成字符串,然后组合成一个数,然后给这个数加一。所以123+1=124;4321+1=4322;但是如果是99呢,99+1=100;这个时候我们会发现数字由俩位数变成三位数。因为数组中的每一个元素只能存储单个数字,所以这个时候数组就需要扩容。然后题中表示最高位数字存储在首位,说明扩容应该是在尾部扩容。题中还假设除了整数0以外,别的数组不会以0开头。

解题步骤:

1、首先对数组进行遍历,因为加一是在尾部加一,故需要从后往前遍历;
2、判断遍历的元素是否为9,如果不是,就给该元素加一,然后结束循环,得到结果;
3、如果元素是9,则把该元素改为0,继续遍历下一个元素;
4、如果如果遍历结束,仍然没有返回一个数,则表示该数组的所以元素都为9;
5、对数组进行扩容,新建一个数组,然后把数组首位改为1;其他位置默认初始值为0;
6、返回扩容后的数组。

java代码实现:

方法一:

class Solution {
    public int[] plusOne(int[] digits) {
        for(int i=digits.length-1;i>=0;i--){//开始遍历,从最后一位开始 
            if(digits[i]!=9){//判断是否为9
                digits[i]++;
                return digits;
            }else{
                digits[i]=0;
            }
        }
        int[] temp = new int[digits.length+1];//新建数组,进行扩容
        temp[0]=1;
        return temp;
    }
}

方法二:

class Solution {
    public int[] plusOne(int[] digits) {
        for(int i=digits.length-1;i>=0;i--){
            digits[i]++;//先对该元素加一
            digits[i]%=10;//对加一后的该元素除十取余
            if(digits[i]!=0){//判断余数是否为0
                return digits;
            }
        }
        int[] temp = new int[digits.length+1];
        temp[0]=1;
        return temp;
    }
}
发布了48 篇原创文章 · 获赞 47 · 访问量 5247

猜你喜欢

转载自blog.csdn.net/weixin_45160969/article/details/103247576