题目
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
思路:
数组-->数字,加一-->数组
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
// 将数组转换为 数字
int len = digits.size();
int sum = 0;
int i = 0;
while(i < len){
sum += digits[i];
if(i != len-1){
sum *= 10;
}
i++;
}
// 加一
sum = sum + 1;
// 将数字转换为数组
i = 0;
while(sum != 0){
digits[i] = sum % 10;
sum /= 10;
i++;
}
// 怎么将这个数组逆置?
for(int k = 0; k < digits.size()/2; k++){
digits[k] = digits[len-k];
}
return digits;
}
};
结果好像想偏了,不能这样做。
然后看了题解的思路,发现是处理不同9的情况。
自己实现了代码,一次就通过啦!!开心心(*^▽^*)
思路:
从后往前遍历
①最后一个元素不是9,就直接最后一个元素++,然后返回即可;
②例如21999这样的情况,就从后往前遍历到第一个不是9的位置,把它加一,然后他之后的元素都赋值为0;
③例如999这样全9的情况,就在vector后面添加一个元素0,然后把数组的第一个元素置为1,再把它之后的所有元素都变为0就好啦!!!
开心心!
代码
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
// 从后往前遍历数组
int len = digits.size();
if(digits[len-1] != 9){
digits[len-1]++;
return digits;
}
int i = 0;
for(i = len-2; i >= 0; i--){
if(digits[i] != 9){
digits[i]++;
for(int k = i+1; k < len; k++){
digits[k] = 0;
}
return digits;
break;
}
}
if(i == -1){
digits.push_back(0);
digits[0] = 1;
for(int m = 1; m < digits.size(); m++){
digits[m] = 0;
}
return digits;
}
return digits;
}
};