Plus One

Description

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

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

The digits are stored such that the most significant digit is at the head of the list.

Tags: Array, Math

思路

题意是给你一个数字数组,高位在前,并且首位不为 0 除非这个数组就是 [0],让你给该数组低位加一求其结果,那么我们就模拟小学数学那样进位去算即可,如果一直进位到首位,这种情况也就是都是由 9 组成的数组,此时我们只要 new 出一个多一个长度的数组即可,并把第 0 个元素赋 1 即可。

Java:

class Solution {
    public int[] plusOne(int[] digits) {
        int p = digits.length - 1;
        if (digits[p] < 9) {
            digits[p] = ++digits[p];
        } else {
            do {
                digits[p--] = 0;
            } while (p >= 0 && digits[p] == 9);
            if (digits[0] != 0) {
                ++digits[p];
            } else {
                digits = new int[digits.length + 1];
                digits[0] = 1;
            }
        }
        return digits;
    }
}

kotlin(208ms/100.00%)

class Solution {
    fun plusOne(digits: IntArray): IntArray {
        var flag = 1
        val len = digits.size
        for (i in len - 1 downTo 0) {
            digits[i] += flag
            if (digits[i] >= 10) {
                digits[i] %= 10
                flag = 1
                continue
            }
            flag = 0
            break
        }
        if (flag == 1) {
            return IntArray(len+1,fun(index: Int):Int{
                if(index==0)return 1
                return digits[index-1]
            })
        }
        return digits
    }
}
var plusOne = function(digits) {
	len  = digits.length - 1
    if(digits[len] < 9) {
        digits[len] = digits[len] + 1
    } else {
        while(len > 0 && digits[len] === 9) {
			digits[len] = 0
			len--
		}
		if(digits[len] === 9) {
			digits[len] = 0
			digits.unshift(1)
		} else {
			digits[len] = digits[len] + 1
		}
    }
	return digits
};

结语

如果你同我们一样热爱数据结构、算法、LeetCode,可以关注我们 GitHub 上的 LeetCode 题解:LeetCode-Solution