算法题:66. 加一

思路

这题初看根本不知道描述的是什么鬼,后面慢慢看示例才知道:把数组转成数字再加1,然后再还原成数组,且每个数字为数组的一个item。
既然理清题意那么就简单了,直接按照题意解就是:

  1. 倒序遍历,每个值加1,并且设置该值为值余10
  2. 因为单个值最大为9,那么超出9的话,取的余一定是0,所以如果当前余值不是0,那么直接返回数组即可
  3. 到最后遍历完都没return的话,即表示原值为9,99,999...,那么只要给数组前加1即可

代码

function plusOne(digits: number[]): number[] {
    for(let i = digits.length - 1; i >= 0; i--){
        digits[i] = (digits[i] + 1) % 10;
        if(digits[i] !== 0){
            return digits;
        }
    }
  
    return [1, ...digits];
};

优化

数组结构这里可以再优化:既然都是0,那么只要第一位设置为1然后最后面添加一个0即可。

function plusOne(digits: number[]): number[] {
    for(let i = digits.length - 1; i >= 0; i--){
        digits[i] = (digits[i] + 1) % 10;
        if(digits[i] !== 0){
            return digits;
        }
    }
  
    digits[0] = 1;
    digits[digits.length] = 0;
    return digits;
};

评论

0 / 800
全部评论()