LeetCode66-加一 | 算法练习系列

205 阅读2分钟

这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战

前言

今天是快乐的周六哦,一会就要开始令人紧张的世界总决赛了,恰好今天看到一道简单的算法题,它的题目叫做加一,那就预祝lpl冠军次数加一吧。哈哈哈

题目描述

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

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

你可以假设除了整数 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的情况,这是我们直接把数组末尾的数加1就行了(这就是我自以为简单的那种情况,我第一眼就想到了这一种情况。。。)
  • 第二中情况就是当数字中末尾存在若干个9的情况,那这时候我们就不能是简单的把末尾那个数加1了,我们还要考虑进位。。。
  • 第二中情况中还有个特说情况,也就是我说的第三种情况,当数字中的所有数都是9的情况,那这时我们就要为数组多增加一项了,到此三种情况都处理完毕,下面上代码
var plusOne = function(digits) {
    let index = digits.length-1
    digits[index] = digits[index]+1
    let curr =  digits[index] //记录当前正在操作的值
    while(curr>=10){
        digits[index] = digits[index]-10
        if(index-1>=0){
             digits[index-1] =  digits[index-1]+1
        curr = digits[index-1]
        index--
        }else{ //这里就是第三种全为9时的情况需要做的特殊处理
            digits.unshift(1)
            return digits //这里一点要记得及时return
        }
       
    }
    return digits
};

总结

做题如做事,当看到问题时的时候可能会感觉非常简单,这时候就要注意你是不是想当然了,一定要记得把所有的情况都考虑进去