zoukankan      html  css  js  c++  java
  • 【leetcode-66】 加一

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

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

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

    示例 1:

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

    示例 2:

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


    我的错误解法:
    不能转为数字然后操作,算法正确但是会越界然后得不到正确结果
        public static int[] plusOne(int[] digits) {
    
            int num = 0;
            for (int i=0;i<digits.length;i++) {
                num = num*10 + digits[i];
            }
            num = num + 1;
            //新数长度
            int length = 0;
            int k = num;
            while(k !=0) {
                k /= 10;
                length++;
            }
            int[] res = new int[length];
            for (int i=length-1;i>=0;i--) {
                res[i] = num%10;
                num = num/10;
            }
            return res;
        }

    参考解法:

    链接:https://www.nowcoder.com/questionTerminal/4d135ddb2e8649ddb59ee7ac079aa882
    来源:牛客网
    
    //1.不需要flag! 从右向左,遇到9就变0,非9就加1,然后break;
    //2.digits[0]如果等于0,说明长度增加了1,则新建数组,首位为1,其他位为0;   
     public int[] plusOne(int[] digits) {
            for (int i = digits.length-1; i >= 0 ; i--) {
                if (digits[i] == 9)digits[i] = 0;
                else {
                    digits[i] = digits[i]+1;
                    break;
                }
            }
            if (digits[0] == 0){
                int[] arr = new int[digits.length+1];
                arr[0] = 1;
                for (int i = 1; i < arr.length; i++) arr[i] = 0;
                return arr;
            }
            return digits;
        }
  • 相关阅读:
    异常总结
    反射
    面试题
    继承多态接口
    JAVA面向对象变成学习!
    学生管理系统---三层架构
    Secondary NameNode
    Hadoop之HDFS
    大数据相关概念二
    大数据相关概念
  • 原文地址:https://www.cnblogs.com/twoheads/p/10650772.html
Copyright © 2011-2022 走看看