Leetcode刷题之旅--66. 加一(数组代表一个数,给这个数加一后返回数组)

Leetcode刷题之旅--66. 加一(数组代表一个数,给这个数加一后返回数组)_第1张图片
一开始为了省事想的是用先组合成一个数,加一之后再转回数组。

class Solution {
    public static int[] plusOne(int[] digits) {
        int x=0;
        for (int i=0;i<=digits.length-1;i++){
            x+=digits[i]*Math.pow(10,(digits.length-1-i));
        }
        x+=1;
        String a=""+x;
        int [] b=new int[a.length()];
        for (int i=0;i<a.length();i++){
            char c=a.charAt(i);
            b[i]=Character.getNumericValue(c);
        }
        return b;
    }
}

提交之后说未通过,原因是当数组长度过长时,会造成溢出。没办法,只能通过分析加一的两种结果再重算。

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

Leetcode刷题之旅--66. 加一(数组代表一个数,给这个数加一后返回数组)_第2张图片
这个用时倒是出乎意料。

你可能感兴趣的:(Leetcode刷题之旅--66. 加一(数组代表一个数,给这个数加一后返回数组))