zoukankan      html  css  js  c++  java
  • LeetCode66. 加一

    题目

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

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

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

    示例 1:

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

    示例 2:

    输入: [4,3,2,1]
    输出: [4,3,2,2]
    解释: 输入数组表示数字 4321。
    一开始解法,转成数字类型,计算后再重新组合成数组(但是数字过大就会异常不符合LeetCode要求,也贴出来吧,看看即可,领悟到实际开发需要写代码前必须考虑全面)
            /// <summary>
            /// 只兼容最大int64
            /// </summary>
            /// <param name="digits"></param>
            /// <returns></returns>
            public static int[] PlusOne2(int[] digits)
            {
    
                if (digits != null && digits.Length > 0)
                {
                    if (digits[0] == 0)
                    {
                        return digits;
                    }
                    if (digits[digits.Length - 1] < 9)
                    {
                        digits[digits.Length - 1] += 1;
                    }
                    else
                    {
                       
                        string num = "";
                        for (int i = 0; i < digits.Length; i++)
                        {
                            num += Convert.ToString(digits[i]);
                        }
                        num = Convert.ToString((Convert.ToInt64(num) + 1));
                        digits = new int[num.Length];
                        int j = 0;
                        foreach (var c in num)
                        {
                            digits[j] = Convert.ToInt32(c.ToString());
                            j++;
                        }
                    }
    
                }
                return digits;
            }

    以下是符合LeetCode的规范解法

            public static int[] PlusOne(int[] digits)
            {
                
                if (digits != null && digits.Length > 0)
                {
                   
                    if (digits[digits.Length - 1] < 9)
                    {
                        digits[digits.Length - 1] += 1;
                    }
                    else
                    {
                        //尾号小于9不用进位,
                        if (digits[digits.Length - 1] < 9)
                        {
                            digits[digits.Length - 1] += 1;
                        }
                        else
                        {
                            //全是9,数组长度加1
                            if (digits.Where(x => x == 9).Count() == digits.Length)
                            {
                                digits = new int[digits.Length + 1];
                                digits[0] = 1;
                                for (int i = 1; i < digits.Length; i++)
                                {
                                    digits[i] = 0;
                                }
                            }
                            else
                            {
                                for (int j = digits.Length - 1; j >= 0; j--)
                                {
                                    if (digits[j] == 9)
                                    {
                                        digits[j] = 0;
                                    }
                                    else
                                    {
                                        digits[j] += 1;
                                        return digits;
                                    }
                                }
                            } }
                       
                    }
    
                }
                return digits;
            }
     
  • 相关阅读:
    在线教育02
    HashMap如何解决取Value值为Null
    Java+selenium 如何定位下拉框select
    Java+selenium 如何下拉移动滚动条【实战】
    Python创建第一个django应用
    如何在Pycharm中配置Python和Django(环境搭建篇)
    selenium+iframe 如何定位元素(实战)
    Java+Selenium 如何参数化验证Table表格数据
    如何实现一个字符的反转 (Java)
    Feature如何解决参数数量不匹配
  • 原文地址:https://www.cnblogs.com/shacoli/p/10164996.html
Copyright © 2011-2022 走看看