LeetCode加一题解 Java Python3

作者:技术拾光

时间:2026-05-30

浏览:408

给定一个非空整数数组表示非负整数,每位加一。需处理进位边界情况:从末位遍历,若加一后为10则置0并进位;若首位进位为0,则新建长度加一的数组,首位设1。此解法模拟竖式加法,避免大整数转换溢出问题。

文章目录

加一

这道题目看似简单,但实际是许多面试中常考的“边界细节”题。给定一个非空的整数数组,每个元素只存储一位数字,整体表示一个非负整数——例如 [1,2,3] 代表数字 123。现在需要在这个数的基础上加一,并返回加完后的数组。

LeetCode加一题解 Java Python3

最高位数字位于数组的首位,且可以假设除了整数 0 之外,整数不会以零开头——换句话说,输入不会是 [0,1,2] 这种形式。英文题目描述为:Given a non-empty array of digits representing a non-negative integer, plus one to the integer. The digits are stored such that the most significant digit is at the head of the list, and each element in the array contain a single digit. You may assume the integer does not contain any leading zero, except the number 0 itself.

先看两个示例:

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

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

看起来直接转换成数字加一即可?但需要注意,数组元素长度可能达到数千位,普通整型无法存储。因此必须采用“模拟竖式加法”的思路。

Java 实现

class Solution {
    public int[] plusOne(int[] digits) {
        for( int i=digits.length;i>=0;i--){
            if(digits[i] 1==10){
                digits[i]=0;
            }else {
                digits[i] =1;
                break;
            }
        }
        if(digits[0]==0){
            int[] digits2=new int[digits.length 1];
            digits2[0]=1;
            return digits2;
        }else {
            return digits;
        }
    }
}

核心思路

核心逻辑十分直接:从数组的最右侧(个位)开始向前遍历。如果当前位加一后等于 10,说明需要进位,将该位置为 0,然后继续处理下一位;若小于 10,则加一操作结束,直接跳出循环。容易遗漏的一种情况是:所有位都发生了进位,例如 [9,9,9],循环结束后数组首位变成 0,此时需要新建一个长度加一的数组,将第一位设为 1,后续全为 0。上述 Java 代码正是按照这一流程——先处理进位,最后判断首位是否为 0,若是则扩容数组。

Python3 实现

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        """
        :type digits: int
        :return: int
        """
        num = 0
        for i in range(len(digits)):
            num = num*10   digits[i]
        return [int(i) for i in str(num 1)]

Python3 的解法更加灵活。上述方式直接将整个数组拼接为一个整数,加一后再转换回字符数组。思路简单,但需要注意:若数组长度极大(如数千位),Python 虽然支持大整数,但转为字符串再拆分也算一种取巧。当然也可以使用类似 Java 的手动进位方式,或者利用 Python 列表的动态特性。

举例来说:可以将数组反转,使用 reversed(digits),然后逐位加一,遇到进位则继续,最后若首位仍为 0(说明仍需进位),直接在数组末尾追加一个 1,最后再反转回来。由于 Python 列表可动态扩展,无需像 Java 那样新建固定长度数组,代码更加简洁。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›