• LeetCode_66——加一


    题目

    给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
    最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
    你可以假设除了整数 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. 先处理普通数组,就是数组最后一位<=8,则+1,直接返回 【[1,2,3,4]->[1,2,3,5]】
    2. 处理最后一位为9,则需要倒序遍历每一位元素+1,只至元素之和<9,则返回 【[1,2,9,9]->[1,3,0,0]】
    3. 处理数组元素都为9,则需要动态化数组扩容+1,首位元素为1,其他位0,则返回 【[9,9]->[1,0,0]】

    代码

    class Solution {
        public int[] plusOne(int[] digits) {
            if(digits[digits.length-1]<=8){
                digits[digits.length-1]=digits[digits.length-1]+1;
                return digits;
            }
    
            for (int i = digits.length-1; i >=0 ; i--) {
                if(digits[i]==9){
                    digits[i]=0;
                }else{
                    digits[i]=digits[i]+1;
                    if(digits[i]<=9){
                        break;
                    }
                }
            }
    
            if(digits[0]==0){
                int[] nums=new int[digits.length+1];
                nums[0]=1;
                return nums;
            }
            return digits;
        }
    }
    

    题解(官方)

    思路

    解题思路和上述差不多,复杂度为n的平方,比我的复杂一点
    将1、2的放在一起进行处理,然后处理3的情况
    倒序查询第一位不为9的数,先自增。再循环遍历之后的元素,设为0,末尾元素,则返回
    【[1,2,3,4]->[1,2,3,5]、[1,2,9,9]->[1,3,0,0]】

    代码

    class Solution {
        public int[] plusOne(int[] digits) {
             for (int i = digits.length-1; i >=0 ; i--) {
                if(digits[i]!=9){
                    digits[i]++;
                    for (int j = i+1; j <digits.length ; j++) {
                        digits[j]=0;
                    }
                    return digits;
                }
            }
            if(digits[0]==0){
                int[] nums=new int[digits.length+1];
                nums[0]=1;
                return nums;
            }
            return digits;
        }
    }
    

    题解(他人)

    思路

    利用(digits[i]+1)%10求余来判断是否每一位数组元素需要进位加1

    代码

    class Solution {
        public int[] plusOne(int[] digits) {
            int len = digits.length;
            for (int i = len - 1; i >= 0; i--) {
                digits[i] = (digits[i] + 1) % 10;
                if (digits[i] != 0) {
                    return digits;
                }
            }
            digits = new int[len + 1];
            digits[0] = 1;
            return digits;
        }
    }
    
  • 相关阅读:
    IntelliJ Idea 2017 免费激活方法
    RabbitMq、ActiveMq、ZeroMq、kafka之间的比较
    Oracle锁的机制
    序列化和持久化的区别
    Hibernate框架之get和load方法的区别
    Hibernate框架之入门案例
    Oracle添加数据报文字与格式字符串不匹配错误
    Linux设备驱动程序 之 异步通知
    Linux设备驱动程序 之 poll和select
    Linux设备驱动程序 之 休眠
  • 原文地址:https://www.cnblogs.com/echola/p/15572730.html
Copyright © 2020-2023  润新知