开发者

go语言题解LeetCode66加一示例详解

开发者 https://www.devze.com 2022-12-31 10:53 出处:网络 作者: 刘09k11
目录题目描述思路分析AC 代码小结JavaScript 66题代码pythonandroid3 循环判断分析:JAVA解决进位问题解题思路代码题目描述
目录
  • 题目描述
  • 思路分析
    • AC 代码
  • 小结
    • JavaScript 66题
      • 代码
    • pythonandroid3 循环判断
      • 分析:
    • JAVA解决进位问题
      • 解题思路
      • 代码

    题目描述

    原题链接 :

    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 <= digits.length <= 100

    0 <= digits[i] <= 9

    思路分析

    对于一般的数字,直接在末位加一即可,

    本题特殊的两个点:

    若加一之后的值为10,需要进一位

    若数字为类似999 ,加一之后需要多一位数。使用insert()来实现, insert函数 : vec.insert(begi编程客栈n()+i ,a) 在第i个元素插入a

    AC 代码

    class Solution {
    public:
        vector<int> plusOne(vector<int>& digits) {
            int size = digits.size();
            if(digits[size-1] != 9) //若末位不等于9,正常加一
            {
                ++digits[size-1];
            }
            else //若末位等于9,加一等于0
            {
                digits[size-1] = 0;
                for(int i = size - 1; i >0; --i) //若加完一后若等于0,下一位要进一 如869
                {
                    if(digits[i] == 0)
                    {
                        digits[i-1] = (digits[i-1] + 1) % 10;
                    }
                    else
                        break; //若某一位是数不需要进一,跳出循环
                }
                if(d编程客栈igits[0] == 0) //若到最后最高位也等于0,需要多一位数 如99 + 1  此时为答案为00,进行一下操作
                {
                    digits.insert(digits.begin(),1); //在最高位插入1
                }
            }
            return digits;
        }
    };
    

    小结

    题目不长,但是还是有点拗口的感觉,首先要先弄明白题意,然后正常的思路下考虑进位的溢出等就可以解出来。

    javascript 66题

    代码

    /**
     * @param {number[]} digits
     * @return {number[]}
     */
    var plusOne = function(digits) {
        //先遍历 从右向左
        for(let i = digits.length-1;i>=0;i--){
            if(digits[i] !==9){
                digits[i]++
                    return digits;
            }else{
                // 是 9
                digits[i] = 0
            }
        }
        let result = [1,...digits];
        /* let result = [1].concat(digits);
        digits.unshift(1);
     */
        return result;
    };
    

    python3 循环判断

    分析:

    这是一道基础的属组倒序查找的问题,唯一需要关注的就是类似[9,9]的场景,循环后需要看是否需要进位。

    如果需要进位,则在数组0位置插入1,才能保证接过的正确性。

    class Solution:
        def plusOne(self, digits):
            count = 1
            for i in range(len(digits) - 1, -1, -1):
                count, digits[i] = divmod(digits[i] + count, 10)
                if count == 0:
                    break
         开发者_JAVA学习   if count:
                digits.insert(0,count)
            return digits

    JAVA解决进位问题

    解题思路

    倒着看,不为9,直接加1,返回:为9的话,需要进位,变成0即可;

    特殊情况 9 99 等,一直为9的,结果肯定是10 ,100 数组长度加1 ,首位为1

    代码

    class Solution {
        public int[] plusOne(int[] digits) {
            int length = digits.length;
            // 最后一个不为九的数加1,为九的变0,9 99 单独处理
            for (int i =  length - 1; i >= 0; i--) {
                if(dandroidigits[i] != 9){
                    digits[i] = digits[i] + 1;
                    return digits;
                }else {
                    digits[i] = 0;
                }www.devze.com
            }
            int[] ints = new int[length + 1];
            ints[0] = 1;
            return ints;
        }
    }
    

    以上就是go语言题解LeetCode66加一示例详解的详细内容,更多关于go题解LeetCode66加一的资料请关注我们其它相关文章!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号