【算法】数组:加一

88 阅读1分钟

题目:加一

leetcode链接:初级算法 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台

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

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

你可以假设除了整数 0 之外,这个整数不会以零开头。

理解

1、有一个非空且非负的整数数组,我们需要给该数组的末尾位加1

2、数组元素按高->低位顺序排列,且每个元素都只是个位数

3、看示例我们可能会有点迷惑,或者觉得太简单了,不就是末尾加1吗?那直接末尾位加1,然后返回就好了,然而实际上,这只是最简单的情况,还有的情况是末尾位为9,或者其它位数也可能存在9的情况,这才是需要处理的重点。

思路:

1、遍历数组元素(逆序),如果该元素不为9,那么直接加1返回即可,如果该元素为9,那么该元素用0代替它,如果出现都是9的情况,那么末尾我们在数组头元素再补个1即可

题解:

方案一、不为9的元素直接加1并且返回数组,否则用0代替该元素

/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function(digits) {
    var len = digits.length
    for(var i = len - 1; i >= 0; i--) {
        if (digits[i] != 9) {
            digits[i] += 1
            return digits
        } else {
            digits[i] = 0
        }
    }
    digits.unshift(1)
    return digits
};

image.png

方案二:

/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function(digits) {
    var len = digits.length
    for(var i = len - 1; i >= 0; i--) {
        digits[i]++
        digits[i] = digits[i] % 10
        if (digits[i] != 0) {
            return digits
        }
    }
    digits.unshift(1)
    return digits
};

image.png