(数学)leetcode66. 加一

该篇文章详细介绍了如何解决LeetCode上的加一问题,即给定一个表示非负整数的数组,对其进行加一操作。解题思路是反向遍历数组,处理可能的进位,最后反转结果数组。文章提供了C++的基础框架和解题步骤,并分析了时间复杂度为O(n),空间复杂度为O(n)。
摘要由CSDN通过智能技术生成

一、题目

1、题目描述

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

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

你可以假设除了整数 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]

2、基础框架

  • C++版本给出的基础框架如下:

3、原题链接

https://leetcode.cn/problems/plus-one/

二、解题报告

1、思路分析

   ( 1 ) (1) (1)考虑可能的进位问题,设置一个变量来表示进位。
   ( 2 ) (2) (2)从尾到头遍历数组,遍历的第一位执行加1操作,判断是否需要进位,如果需要进位,则进位变量设为1,将第一位加1之后的值除10求余将余数加入结果数组,如果不需要进位,则进位变量为0。
   ( 3 ) (3) (3)之后的遍历中每个数字都加上进位变量,依次判断是否需要进位。
   ( 4 ) (4) (4)遍历完成后,判断进位变量是否为1,如果为1,则将1加入结果数组。
   ( 5 ) (5) (5)反转结果数组。

2、时间复杂度

时间复杂度为O(n),空间复杂度为O(n)

3、代码详解

class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        int d = 0;
        vector<int> re;
        int n = digits.size();
        int temp = 0;
        for (int i=n-1;i>=0;i--) {
            if (i == n-1){
                temp = d + digits[i] + 1;
            }
            else {
                temp = d + digits[i];
            }
            if (temp > 9) {
                temp = temp%10;
                d = 1;
            } else {
                d = 0;
            }
            re.push_back(temp);
        }
        if (d > 0) re.push_back(1);
        reverse(re.begin(),re.end());
        return re;
    }
};

三、本题小知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值