题目描述: 加一
给定一个非负整数组成的非空数组,给整数加一。
可以假设整数不包含任何前导零,除了数字0本身。
最高位数字存放在列表的首位。
解题思路:
理解了题目中数组每个元素是一位数后,想把数组转换为一个数,然后加一后再转换为数组,由于题目数据太大了爆了;然后就只能模拟了,讨论特殊全9的情况。
注:vector单个元素赋值只能对已存在的赋值,比如:
vector<int> a;
a.pushback(0); //a.size() = 1
a[0] = 1; //合法
a[1] = 1; //非法
a.push_back(1); //合法
代码:
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int len = digits.size();
vector<int> ans;
if(is9(digits)) {
ans.push_back(1);
for(int i = 0 ; i < len ; i ++)
ans.push_back(0);
return ans;
}
for(int i = len -1 ; i >= 0; i --) {
if(digits[i] != 9) {
digits[i] ++;
return digits;
}
digits[i] = 0;
}
return digits;
}
bool is9(vector<int> a) {
for(int i = 0 ; i < a.size() ; i ++)
if(a[i] != 9) return false;
return true;
}
};