Day36 加一

作者: Shimmer_ | 来源:发表于2021-03-02 23:02 被阅读0次

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

    https://leetcode-cn.com/problems/plus-one/

    数组中每个元素只存储单个数字。

    你可以假设除了整数 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

    Java解法

    思路:

    • 比较简单,只要考虑进位问题即可
    • 倒序+1计算,变量存储进位值,遍历完成时如果需要进位,则需要对原数组进行copy赋值满足最大位进位
    package sj.shimmer.algorithm.m2;
    
    import sj.shimmer.algorithm.Utils;
    
    /**
     * Created by SJ on 2021/3/1.
     */
    
    class D36 {
        public static void main(String[] args) {
            Utils.logArray(plusOne(new int[]{1, 2, 3, 4, 5, 6}));
            Utils.logArray(plusOne(new int[]{9,9,9}));
        }
    
        public static int[] plusOne(int[] digits) {
            if (digits != null && digits.length > 0) {
                int length = digits.length;
                int sum = digits[length - 1] + 1;
                digits[length - 1] = sum % 10;
                int temp = sum / 10;
                int i = length - 2;
                while (i >= 0 && temp > 0) {
                    sum = digits[i] + temp;
                    digits[i] = sum % 10;
                    temp = sum / 10;
                    i--;
                }
                if (temp>0) {
                    int[] result = new int[length+1];
                    result[0] = temp;
                    for (int j = 1; j < result.length; j++) {
                        result[j] = digits[j-1];
                    }
                    return result;
                }
            }
            return digits;
        }
    }
    
    image

    参考解

    https://leetcode-cn.com/problems/plus-one/solution/java-shu-xue-jie-ti-by-yhhzw/

    发生进位时,说明全是9,直接长度+1,后面全为0,不用赋值

    public int[] plusOne(int[] digits) {
        for (int i = digits.length - 1; i >= 0; i--) {
            digits[i]++;
            digits[i] = digits[i] % 10;
            if (digits[i] != 0) return digits;
        }
        digits = new int[digits.length + 1];
        digits[0] = 1;
        return digits;
    }
    

    逻辑优化的确实很好(坏处是需要理解时间)

    相关文章

      网友评论

        本文标题:Day36 加一

        本文链接:https://www.haomeiwen.com/subject/wrdfqltx.html