描述
给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组。
该数字按照数位高低进行排列,最高位的数在列表的最前面。
您在真实的面试中是否遇到过这个题?
样例
给定 [1,2,3] 表示 123, 返回 [1,2,4].
给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组。
该数字按照数位高低进行排列,最高位的数在列表的最前面。
您在真实的面试中是否遇到过这个题?
样例
给定 [1,2,3] 表示 123, 返回 [1,2,4].
给定 [9,9,9] 表示 999, 返回 [1,0,0,0].
分析
直接在原数组上面操作,时间复杂度为O(n),空间复杂度为O(1)
程序
class Solution {
public:
/**
* @param digits: a number represented as an array of digits
* @return: the result
*/
vector<int> plusOne(vector<int> &digits) {
// write your code here
int size = digits.size();
int index = size - 1;//从最后一位开始算
while(index >= 0){
if(++digits[index] == 10){//当前数+1等于10,则赋值为0,index-1
digits[index--] = 0;
}
else{//不需要进位,则直接退出
break;
}
}
if(index == -1)//面对999,这种情况,由于上面已经赋值为0,只需头部插1
digits.insert(digits.begin(), 1);
return digits;
}
};