🍧 leetcode刷题之【加一】

98 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情

🍧 leetcode刷题之【加一】

1 题目

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

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

你可以假设除了整数 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 <= digits.length <= 100
  • 0 <= digits[i] <= 9

2 个人解析

2.1 思路

看到这题第一感觉是这不就是给一个元素组,然后再输出一个元素组吗?再一看,诶,不是啊,原来是在数组的最后一位加一,那我就直接给这个组最后一个元素加一不就行了吗? 然后再一看还是不行,这里要考虑到一个进位的问题,所以呢我得在每一位上面判断是否需要定位,如果需要进位的话,那我就接着往前面加,一直加,一直加,一直加到不需要进位就算结束,然后再把这个前面的没有,计算过的数原样拷贝过来。 所以我就用了一个新数组来存放计算过的数,用一个flag变量来表示是否需要继续加下去了,当flag为0的时候就不需要继续计算这种加法,直接拷贝元素组的元素到新数组里面就可以了。ok,请看下面的代码

2.2 代码

  • 实现方式1
/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function(digits) {
    let newDigites=[],flag = 1;
    digits.reverse().map((value,index)=>{
        console.log(value,flag)
        if(flag===1&&value===9){
            newDigites.unshift('0')
        }
        else if(flag===1){
            newDigites.unshift(value+1+'');
            flag=0;
        }
        else{
            newDigites.unshift(value)
        }
    })
    if(flag===1){
        newDigites.unshift('1')
    }
    
    return newDigites;
};
  • 实现方式2

第二种实现方式主要考虑到了一个内存容量的问题,使用这个方法可以使空间复杂度变低,这样占的内存就小了一些。

/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function(digits) {
    let newDigites=[],flag = 1;
    for(let i=digits.length-1;i>=0;i--){
        if(flag===1&&digits[i]===9){
            newDigites.unshift('0')
        }
        else if(flag===1){
            newDigites.unshift(digits[i]+1+'');
            flag=0;
        }
        else{
            newDigites.unshift(digits[i])
        }
    }
    if(flag===1){
        newDigites.unshift('1')
    }
​
    return newDigites;
};

3 小结

做这题的时候,我遇到到了一个精度的问题看一下我最原始写的代码,我发现一个问题,就是最后面几位数会是零,这个时候我才知道Js中有一个精度,整数只能显示到17位,后边的话就只能四舍五入,全为零了,所以对于计算大数的时候不能这样写

efbbb0e5d4bf8bd49e5e1b3874c2c841

dfadade681060f6ee35ff6686277cb4b

感谢看完:

  • 博主个人前端网站:zhangqiang.hk.cn
  • 欢迎加入博主的前端学习qq交流群::706947563专注前端开发,共同学习进步啊 ~