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

目录
  • 题目描述
  • 思路分析
    • AC 代码
  • 小结
  • JavaScript 66题
    • 代码
  • python3 循环判断
    • 分析:
  • 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(begin()+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(digits[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
        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(digits[i] != 9){
                digits[i] = digits[i] + 1;
                return digits;
            }else {
                digits[i] = 0;
            }
        }
        int[] ints = new int[length + 1];
        ints[0] = 1;
        return ints;
    }
}

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

(0)

相关推荐

  • Go语言题解LeetCode455分发饼干示例详解

    目录 题目描述 思路分析 AC 代码 分发饼干 贪心算法 解题思路 代码 题目描述 原题链接 : 455. 分发饼干 - 力扣(LeetCode) (leetcode-cn.com) 假设你是一位很棒的家长,想要给你的孩子们一些小饼干.但是,每个孩子最多只能给一块饼干. 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸:并且每块饼干 j,都有一个尺寸 s[j] .如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足.你的目标

  • go语言题解LeetCode453最小操作次数使数组元素相等

    目录 题目描述 思路分析 AC 代码 小结 遍历数组一次 解题思路 代码 强行找规律 解题思路 代码 题目描述 原题链接 : 453. 最小操作次数使数组元素相等 - 力扣(LeetCode) (leetcode-cn.com) 给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 .返回让数组所有元素相等的最小操作次数. 示例 1: 输入:nums = [1,2,3] 输出:3 解释: 只需要3次操作(注意每次操作会增加两个元素的值): [1,2,3] => [2,3,3

  • go语言题解LeetCode506相对名次示例详解

    目录 一 描述 二 分析 三 答案 一 描述 506. 相对名次 给你一个长度为 n 的整数数组 score ,其中 score[i] 是第 i 位运动员在比赛中的得分.所有得分都 互不相同 . 运动员将根据得分 决定名次 ,其中名次第 1 的运动员得分最高,名次第 2 的运动员得分第 2 高,依此类推.运动员的名次决定了他们的获奖情况: 名次第 1 的运动员获金牌 "Gold Medal" . 名次第 2 的运动员获银牌 "Silver Medal" . 名次第

  • Go语言题解LeetCode268丢失的数字示例详解

    目录 题目描述 思路分析 AC 代码 异或两遍 - 丢失的数字 解题思路 代码 C++ 排序二分.加减法.异或 - 丢失的数字 解题思路: 题目描述 原题链接 : 268. 丢失的数字 给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数. 示例 1: 输入:nums = [3,0,1] 输出:2 解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内.2 是丢失的数字,因为它没有出现在 nums 中. 示例 2

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

    目录 题目描述 思路分析 AC 代码 小结 JavaScript 66题 代码 python3 循环判断 分析: JAVA解决进位问题 解题思路 代码 题目描述 原题链接 : 66. 加一 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 示例 1: 输入:digits = [1,2,3] 输出:[1,2,4] 解释:输入数组表示数字 123. 示例 2:

  • go语言题解LeetCode1160拼写单词示例详解

    目录 题目描述 思路分析 AC 代码 别人用int[26] 解题思路 代码 c++几乎双百的哈希解法 代码 题目描述 1160. 拼写单词 - 力扣(LeetCode) 给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars. 假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词. 注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次. 返回词汇表 words 中你

  • Go语言基础结构体用法及示例详解

    目录 概述 语法 结构体定义的三种形式 第一种[基本的实例化] 第二种[指针类型的结构体] 第三种[取结构体的地址实例化,通过&的操作] 初始化结构体 键值对初始化结构体 值列表填充结构体 匿名结构体 访问结构体成员 结构体作为函数参数 结构体指针 添加结构体方法 总结 示例 概述 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合 语法 定义结构体[标识自定义结构体的名称,在同一个包内不能重复] type 结构名 struct { 字段1: 字段1的值, 字段2: 字段2的值, ...

  • C语言实现冒泡排序算法的示例详解

    目录 1. 问题描述 2. 问题分析 3. 算法设计 动图演示 4. 程序设计 设计一 设计二 结论 5. 流程框架 6. 代码实现 7. 问题拓展 1. 问题描述 对N个整数(数据由键盘输入)进行升序排列. 2. 问题分析 对于N个数因其类型相同,我们可利用 数组 进行存储. 冒泡排序是在 两个相邻元素之间进行比较交换的过程将一个无序表变成有序表. 冒泡排序的思想:首先,从表头开始往后扫描数组,在扫描过程中逐对比较相邻两个元素的大小. 若相邻两个元素中,前面的元素大于后面的元素,则将它们互换,

  • C语言学习之关键字的示例详解

    目录 1. 前言 2. 什么是关键字 3. extern-声明外部符号 4. auto-自动 5. typedef-类型重定义(类型重命名) 6. register-寄存器 6.1 存储器 6.2 register关键字的作用 7. static-静态 7.1 static修饰局部变量 7.2 static修饰全局变量 7.3 static修饰函数 1. 前言 大家好,我是努力学习游泳的鱼.关键字,这名字一听,就很关键.而有些关键字,你可能不是很了解,更别谈使用.所以,这篇文章将带你见识常见的关

  • C语言中的正则表达式使用示例详解

    正则表达式,又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE).正则表达式是使用单个字符串来描述.匹配一系列符合某个句法规则的字符串. 在c语言中,用regcomp.regexec.regfree 和regerror处理正则表达式.处理正则表达式分三步: 编译正则表达式,regcomp: 匹配正则表达式,regexec: 释放正则表达式,regfree. 函数原型 /* 函数说明:Regcomp将正则表达式字符串regex编译

  • VSCode各语言运行环境配置方法示例详解

    系统环境变量的配置 如:将F:\mingw64\bin添加到系统环境变量Path中 VSCode软件语言json配置C语言 创建个.vscode文件夹,文件夹内创建以下两个文件 launch.json 文件配置 { "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg&

  • c语言左移和右移的示例详解

    逻辑移位,简单理解就是物理上按位进行的左右移动,两头用0进行补充,不关心数值的符号问题. 算术移位,同样也是物理上按位进行的左右移动,两头用0进行补充,但必须确保符号位不改变. 算术移位指令 算术移位指令有:算术左移SAL(ShiftAlgebraic Left)和算术右移SAR(ShiftAlgebraic Right).算术移位指令的功能描述如下: (1)算术左移SAL把目的操作数的低位向高位移,空出的低位补0: (2)算术右移SAR把目的操作数的高位向低位移,空出的高位用最高位(符号位)填

随机推荐