LeetCode(066) Plus One (Java)

本文解析了一个经典面试题——数组形式表示的大数加一,并提供了一种有效的解决方案。讨论了可能遇到的数组下标越界错误及如何避免,同时提到了此题在面试中的考察点及其扩展问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目如下:

Plus One Total Accepted: 42505 Total Submissions: 138460 My Submissions Question Solution 
Given a non-negative number represented as an array of digits, plus one to the number.

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


分析如下:

一开始写居然写出来了 ArrayIndexOutOfBoundsException尴尬 数组下标越界。

虽然这道题目木比较简答,但是可能会有一些扩展的问题。见这里CodeGanker分析

我自己在Google的电面中就遇到了这道题,我觉得为什么Google喜欢的原因是后续可以问一些比较基本的扩展问题,比如可以扩展这个到两个数组相加,或者问一些OO设计,假设现在要设计一个BigInteger类,那么需要什么构造函数,然后用什么数据结构好,用数组和链表各有什么优劣势。这些问题虽然不是很难,但是可以考到一些基本的理解,所以平时准备有机会还是可以多想想哈


我的代码:

// 209 ms
public class Solution {
    public int[] plusOne(int[] digits) {
        int carry = 1;
        for (int i = digits.length - 1; i >= 0; --i) {
            int new_carry = (digits[i] + carry)/10;
            digits[i] = (digits[i] + carry) % 10;
            carry = new_carry;
            
        }
        if (carry > 0){
            int[] array = new int [digits.length + 1];
            //for (int i = array.length -1; i >=0; --i) {   
            //     array[i] = digits[i - 1];
            //java.lang.ArrayIndexOutOfBoundsException: 1            
            for (int i = array.length -1; i >=1; --i) {
                array[i] = digits[i - 1];
            }
            array[0] = carry;
            return array;
        }else {
            return digits;
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值