加一-leetcode编程题之精选TOP面试题-java实现

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

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

你可以假设除了整数 0 之外,这个整数不会以零开头。

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

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

解答思路:
分为两种情况讨论,数组最后一个元素小于9,直接将其加1输出
否则,又分为两种情况,一种情况是数组每个元素都为9,那么数组需要扩容,否则不扩容;不管是否扩容,从最后一位开始加1,如果加1后元素为10,则该位置置为0,前一位元素的值加1(相当于进位了)。

题后感:
一开始使用的方法是,将数组转换成数值,加1后又转换为数组,结果一旦数组很长,就会溢出报错。因此又改正了方法。

java版个人答案(只含函数):

class Solution {
    public int[] plusOne(int[] digits) {
        //末尾数小于8,直接加1
        if(digits[digits.length-1]<=8){
            digits[digits.length-1]+=1;
            return digits;
        }
        
        //如果每个数都为9,才扩容,否则不扩容
        int count=0;
        //判断是否都为9
        for(int i=0;i<digits.length;i++){
        	if(digits[i]==9){
        		count++;
        	}
        }
        //如果都是9,进行扩容,否则不扩容
        if(count==digits.length){
            int arr[]=new int[digits.length+1];
            for(int i=0;i<digits.length;i++){
            	arr[i+1]=digits[i];
            }
            arr[arr.length-1]+=1;
            for(int i=arr.length-1;i>=0;i--){
                if(arr[i]==10){
                	arr[i]=0;
                	arr[i-1]+=1;
                }
            }
            return arr;
        }else{
            digits[digits.length-1]+=1;
            for(int i=digits.length-1;i>=0;i--){
                if(digits[i]==10){
                    digits[i]=0;
                    digits[i-1]+=1;
                }
            }
        }
        return digits;
    }
}

个人答案也许有不足之处,如果你有更好的想法,欢迎评论区指教,方便大家一起交流学习。

觉得不错的小伙伴可以右上角点个赞或关注哟!

猜你喜欢

转载自blog.csdn.net/fallwind_of_july/article/details/93373430