力扣题66加一

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

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

示例 2:

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

示例 3:

输入:digits = [0]
输出:[1]

1.自己的解法。先根据尾数是不是9进行分别判断,如果尾数不是9,就不会产生进位,比较简单;如果是9,则向前遍历,一旦进位为0后,就退出循环。如果退出循环后还有进位,说明是从999...9加1成为1000...00的情况,用一个新的数组来表示该数字。

class Solution {
    public int[] plusOne(int[] digits) {
        int length = digits.length;

        if(digits[length - 1] != 9){//尾数不为9的情况,直接将尾数加1
            digits[length - 1]++;
            return digits;
        }
        
        //尾数为9的情况,先对尾数进行计算,变成0,并且产生进位
        int index = length - 1;
        digits[index--] = 0;
        int jinwei = 1;

        while(index >= 0){//继续向前遍历
            digits[index] += jinwei;//当前遍历到的数字加上进位
            jinwei = 0;//进位被加后重置为0
            if(digits[index] == 10){//如果加上进位还是10,则继续向前进位
                digits[index] = 0;
                jinwei = 1;
            }else{//不是10,直接退出循环
                break;
            }
            index--;
        }
        //如果还存在进位,说明是从999...9变成1000...00的情况,新创建一个数组
        if(jinwei == 1){
            int[] newdigits = new int[length + 1];
            newdigits[0] = 1;
            return newdigits;
        }else{//不存在进位,直接输出
            return digits;
        }
    }
}

2.其他人的解法:思想类似,但是可以只分成全为9和不全为9两种情况进行讨论。

   代码来自评论@朴实的微笑

class Solution {
    public int[] plusOne(int[] digits) {
        //从后往前遍历数组
        for (int i = digits.length - 1; i >= 0; i--) {
			if (digits[i] != 9) {//遇到的数如果不是9,直接加1返回即可
                digits[i]++;
				return digits;
			} 
			digits[i] = 0;//如果遇到的是9,说明产生进位,当前位是0,遍历的下一位加1
		}
        
        //跳出for循环,说明数字全部是9
		int[] temp = new int[digits.length + 1];
		temp[0] = 1;
		return temp;
    }
}

题源:力扣

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值