Plus One

来源:互联网 发布:网络被骗500 编辑:程序博客网 时间:2024/06/07 02:54

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.

public class Solution {    public int[] plusOne(int[] digits) {        int len = digits.length;        int flag = 1;        if (digits[len - 1] < 9){ //check:当末位加1不进位时,前面的所有位都保持现状,仅末位++即可            digits[len - 1] ++;            return digits;        }        for (int i = len - 1; i >= 0; i --){            if (flag == 1) {                if (digits[i] + flag == 10){                    digits[i] = 0;                    flag = 1;                  }                else{                    digits[i] ++;                    flag = 0;                }            }        }        if (flag == 1){            digits = Arrays.copyOf(digits, digits.length + 1); //向数组添加新元素            digits[0] = 1;        }        return digits;    }}
这里很显然,有无check代码runtime会有所不同,因为当该digit是个位数时,就可以作为特殊情况直接进行判断,而省去进入循环的过程。

这道题也是属于Easy级别(不要笑我,毕竟从易到难是需要一个过程的嘛~~~),所以对只要是会写程序的稍微有点逻辑性的人都应该没什么难度,需要着重指出的是最后输出时的数组更新过程。当最高位需要进位时,最高位变为1,并需要将整个数组后移一位,这时会改变已有的数组的长度,就会报错,数组下标越界了:

于是这里就要用到Arrays.copyof()方法了,Arrays的copyOf()方法传回的数组是新的数组对象,所以不会影响原来的数组。copyOf()的第一个变量是原数组名,第二个自变量指定要建立的新数组长度,如果新数组的长度超过原数组的长度,则新元素默认为0。

(这个我一开始也不知道啦,查过用过get AC过之后就来跟大家分享啦)

0 0
原创粉丝点击