leetcode-question66

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ceoicac/article/details/81215832

加一

题目描述

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

思路

首先判断加一以后数字的位数会变得情况,也就是9,99,999,…等情况的时候,这种情况好处理,直接将数组的长度加一,第一个元素为1,其他为0即可。第二种情况是需要进位的,首先将数组的最后一个元素加一,然后从后往前遍历,大于等于10,当前数字-10,前一个数字+1,以此类推。

代码:

class Solution {
    public int[] plusOne(int[] digits) {
        //判断是否为9,99的类型数组的标志位
        boolean isAllNine = true;
        for(int i = 0;i < digits.length; ++i){
            if(digits[i] != 9){
                isAllNine = false;
                break;
            }
        }
        if(!isAllNine){
             digits[digits.length - 1] += 1;
            for(int i = digits.length - 1; i >= 0 ; --i){
                if(digits[i] > 9){
                    digits[i] = 0;
                    digits[i-1] += 1;
                }
            }
        }else{
            int [] newDigits = new int[digits.length + 1];
            newDigits[0] = 1;
            digits = newDigits;
        }
        return digits;
    }
}

猜你喜欢

转载自blog.csdn.net/ceoicac/article/details/81215832
今日推荐