描述
给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组。
该数字按照大小进行排列,最大的数在列表的最前面。
样例
给定 [1,2,3] 表示 123, 返回 [1,2,4].
给定 [9,9,9] 表示 999, 返回 [1,0,0,0].
思考
- 尾数 < 9, 直接加一即可
- 尾数 = 9, 需要考虑首位是否存在加一的情况
代码
// By Lentitude
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
// digits >= 0
if (digits.empty()){
return digits;
}
int len = digits.size();
int i = len - 1;
// 如果尾数 < 9 ,则直接 +1 返回
if (digits[i] < 9){
digits[i]++;
return digits;
}else{
// 如果尾数 = 9, 则进行加一处理
while (i > 0){
digits[i--] = 0;
if (digits[i] < 9 ){
digits[i]++;
return digits;
}
}
// 对首位需要判断是否存在进位的情况
if (digits[0] < 9){
digits[0]++;
return digits;
}else{
vec.push_back(1);
digits[0] = 0;
vec.insert(vec.begin()+1, digits.begin(), digits.end());
return vec;
}
}
}
private:
vector<int> vec;
};