[66] Plus One

1. 题目描述

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.

给定一个数组,数组每一位都是一个0-9的数字,给这个数组加1。如{1,2,3,4,5} -> {1,2,3,4,6}。

2. 解题思路

这个题主要就是考察进位的问题,十进制的进位制度大家都知道,当当前最后一位是9的时候加1向前进位,不是9就直接在最后一个数字上加1。那么简单的思想就是使用一个循环,从后面往前逐级进位就好了,但是这时候就有一个问题,当数字为9,99,999等等全是9的数字时,进位产生的数组长度是会加1的,也就是从{9,9,9}->{1,0,0,0},这样就需要将数组扩容1位,也就需要进行判断和复制操作。判断时我使用了判断第一位是否为0且是否之前进位到了第1位的方式,其实也可以使用一个flag,在循环内部停止进位时标记为true,之后在外面直接进行判断即可。

3. Code

public class Solution {
    public int[] plusOne(int[] digits) {
        // 从后往前进位
        int i;
        for(i = digits.length - 1; i >= 0; --i)
        {
            if(digits[i] != 9)
            {
                digits[i] += 1;
                break;
            }
            digits[i] = 0;
        }
        // 如果第一位也产生进位生成一个新的长度加1的数组
        if(i == -1 && digits[0] == 0)
        {
            int [] newDigits = new int[digits.length + 1];
            newDigits[0] = 1;  // 第一位设为1
            // 后面为设为进位完的原数组
            // public static native void arraycopy(Object src,  int  srcPos,Object dest, int destPos,int length);
            System.arraycopy(digits, 0, newDigits, 1, digits.length);  // 使用自带的拷贝函数
            /*for(int j = 0; j < digits.length; ++j)
            {
                newDigits[j+1] = digits[j];
            }*/
            digits =  newDigits;
        }
        return digits;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值