【LeetCode】No.66. Plus One -- Java Version

题目链接:https://leetcode.com/problems/plus-one/

1. 题目介绍(Plus One)

You are given a large integer represented as an integer array digits, where each digits[i] is the ith digit of the integer. The digits are ordered from most significant to least significant in left-to-right order. The large integer does not contain any leading 0’s.

【Translate】:给定一个用整数数组digits表示的大整数,其中每个digits[i]是整数的第i位数。数字按从左到右的顺序从最重要的到最不重要的排序。large integer不包含任何前导0。

// PS: 在C语言中,LARGE_INTEGER是一个union,用于表示一个64位有符号整数,其结构定义如下:
typedef union _LARGE_INTEGER{
     struct{
             DWORD LowPart,
             LONG  HighPart
           };
    LONGLONG QuadPart
}LARGE_INTEGER;

//含义是当编译器支持64位整数时使用QuadPart(64位)存取。否则分别在LowPart(32位)和HighPart(32位)存取,HighPart的最高位为符号位。
//表示数的范围:--3689348814741910324到+4611686018427387903

Increment the large integer by one and return the resulting array of digits.

【Translate】: 将large integer加1并返回结果数组。

【测试用例】:
TestCase1

【条件约束】:
constraints

2. 题解

xmind
如上图所示,该题目的所有条件可以拆分成三点。即,① 数组最后一位一定要+1,② 满十进位问题,③ 数组扩容问题。

我们只要按照拆分的步骤一步一步的写就可以了,从最后一位起一位一位的判断是否为9,是则赋0,不是则+1后跳出;循环结束后,判断一下是否存在数组全为9的情况,判断数组第一个元素是否为0即可,为0说明即满9,进行扩容赋1操作。题解代码如下:

2.1 顺序实现

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

act

2.2 递归实现

原题解来自于devarshipandya的Java Recursive Solution (Faster than 100%)

class Solution {
    public int[] plusOne(int[] digits) {
        return addToGivenIndex(digits, digits.length - 1);
    }
    
    private int[] addToGivenIndex(int[] arr, int index) {
        if(arr[index] != 9) {
            arr[index] += 1;
            return arr;
        }
        arr[index] = 0;
        if(index == 0) {
            int[] newArr = new int[arr.length + 1];
            newArr[0] = 1;
            for(int i = 0; i < arr.length; i++) {
                newArr[i + 1] = arr[i];
            }
            return newArr;
        }
        return addToGivenIndex(arr, index - 1);
    }
}

act2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TomLazy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值