游乐游手机版
首页/AI教程/文章详情

Leetcode加一解法 Java与Python3实现

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

LeetCode 加一:数组加一算法详解与边界处理

这道题表面简单,却是许多面试中热衷考察的“边界细节”题目。给你一个非空整数数组,每个元素只存储一位数字,整个数组表示一个非负整数——例如 [1,2,3] 对应数字 123。现在需要在这个整数的基础上加一,并返回加一后的数组结果。

Leetcode加一 (ja va、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 那样新建固定长度数组,代码写起来更为简洁。

来源:https://developer.aliyun.com/article/704487
上一篇Python基础语法入门学习第一篇 下一篇国内AI技术进步推动表格处理能力再创新高
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
十大高效AI写作平台推荐与测评
AI教程 · 2026-05-30

十大高效AI写作平台推荐与测评

市面上的AI写作工具让人眼花缭乱,究竟哪些才真正实用?结合当前市场趋势和大量用户真实反馈,我们整理出十款值得关注的智能写作助手,每一款都有独特的核心优势。 十大高效智能写作工具推荐 WPS AI:由金山办公推出的WPS AI,依托强大的大语言模型,可以完成起草、改写、总结、润色、翻译、续写等多种任务

通用Token Plan与Hy Token Plan搭配指南:限购1+1及抵扣顺序
AI教程 · 2026-05-30

通用Token Plan与Hy Token Plan搭配指南:限购1+1及抵扣顺序

腾讯云TokenHub允许同一主账号同时持有1个通用TokenPlan和1个HyTokenPlan,共用一把APIKey,由ModelID自动路由抵扣。每个主账号最多持有2个套餐(1个通用+1个Hy),同系列内仅持有一个档位。提供四套组合方案,覆盖轻量探索到重度生产力场景。套餐以自然月计费,不支持降配和退款。

泰勒·斯威夫特与AI技术融合新趋势
AI教程 · 2026-05-30

泰勒·斯威夫特与AI技术融合新趋势

Taylor Swift AI Images Generator是什么 先抛一个问题:假如你想要一张泰勒·斯威夫特的个性化头像,又不想千篇一律地用网络图片,该怎么办?答案就在Taylor Swift AI Images Generator里。简单来说,这是一款借助人工智能技术生成泰勒·斯威夫特AI图

SEO ASSIST帮你轻松创建高效SEO内容简化工作流程提升流量
AI教程 · 2026-05-30

SEO ASSIST帮你轻松创建高效SEO内容简化工作流程提升流量

SEO ASSIST 工具全面介绍:让搜索引擎优化更高效从事搜索引擎优化(SEO)的人都知道,内容的创作与优化往往是整个流程中最耗费时间与精力的环节。不过,现在有一款工具正在积极尝试改变这一局面——SEO ASSIST。它的设计理念非常直接:将繁琐的SEO工作拆解成几个清晰可执行的步骤,帮助用户摆脱

Bing图像生成器使用指南与优化技巧
AI教程 · 2026-05-30

Bing图像生成器使用指南与优化技巧

BingImageCreator是什么 简单来说,BingImageCreator是微软推出的一款“文本生成图像”的AI绘图工具。你只需输入一段文字描述,它就能借助深度学习算法和神经网络模型,自动绘制出对应的视觉画面。这套技术能让机器“读懂”文字并合成逼真的图像,广泛应用于创意设计、广告视觉、产品原