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操作会影响到插入位置后面的所有元素,这是产生内存开销的一个大头。
荡尘涤污,重整河山,便在今日