网络编程
位置:首页>> 网络编程>> Go语言>> go语言题解LeetCode66加一示例详解

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

作者:刘09k11  发布时间:2024-05-13 10:43:47 

标签:go,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 <= 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;
   }
}

来源:https://juejin.cn/post/7173675582759108645

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com