C++ 整数数组加一 [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

链接:https://leetcode-cn.com/problems/plus-one

解法思路很简单,就是从末尾加1,如果无进位就直接结束返回,有进位即9->10的情况,就把这个位置置为0,紧接着上一级+1,如此反复直到没有进位。如果最高位产生进位,会变为0000,需要在最前边插入1,代码如下:

class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        if(1+digits[0]==1) 
        {
            digits[0]++;
            return digits;
        }
        for(int i=digits.size()-1;i>=0;--i)
        {
            if(1+digits[i]<10)//无进位,直接加
            {
                digits[i]++;
                return digits;
            }
            else if(digits[i]+1==10&&i!=0) //产生非最高位的进位
            {
                digits[i]=0;
            }
            else if(digits[i]+1==10&&i==0) //出现[9,9,9,9,9]->[0,0,0,0,0],需要在前边补0
            {
                digits[i]=0;
                digits.insert(digits.begin(),1);
            }
        }
         return digits;
    }
};

 

运行时间超过100%,内存占用大约50%,对vector的insert操作会影响到插入位置后面的所有元素,这是产生内存开销的一个大头。

posted @ 2021-09-13 16:27  北陌南旬  阅读(334)  评论(0)    收藏  举报