侧边栏壁纸
博主头像
StarStone 博主等级

长风破浪会有时,直挂云帆济沧海

  • 累计撰写 31 篇文章
  • 累计创建 16 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Leetcode 66.加一

StarStone
2024-01-26 / 0 评论 / 1 点赞 / 52 阅读 / 0 字

Leetcode 66.加一

66.加一

描述:给定一个非负整数数组,数组每一位对应整数的一位数字。

要求:计算整数加 11 后的结果。

说明:

  • 1≤digits.length≤100

  • 0 ≤ digits[i] ≤ 9

示例:

示例1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
示例2:
输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。

思路

这是数组模拟加1运算的题目。直观地,指针从数字最后一位开始,数值+1,会有2种可能:

  • 结果不为10,直接结束,不需要进位。直接返回原数组digits。

  • 结果为10,指针指向倒数第2位,数值+1。此时,也会有2种可能:

    • 结果不为10,直接结束,不需要进位。直接返回原数组digits。

    • 结果为10,指针指向倒数第3位,数值+1。继续有2种可能...

上诉过程就是一个迭代的过程。当然也需要考虑特殊情况:999类型(所有数字都是9)。999+1=1000,不能返回原数组(计算结果4位 > 原数组3位)。所以需要新建1个result数组(长度为原数组长度+1,即4位),result数组首位为1,其余位为0。

除此之外,这里有1个技巧,就是使用取模10来完成数字转换:

  • 如果+1后结果(结果取值范围是 [1, 10] )为10的话,则该位数字应为0。

  • 如果+1后结果是1~9,则该位数字应是原数本身。

public int[] plusOne(int[] digits) {
        for (int i = digits.length - 1 ; i >= 0 ; i--) {
                digits[i]++;
                //取模10。如果+1结果为10,该位数字为0。
                digits[i] %= 10;
                if (digits[i] != 0){
                        return digits;
                }
        }
        // 仍然未返回原数组,说明是999类型
        int[] result = new int[digits.length + 1];
        result[0] = 1;
        return result;
}

1

评论区