Question:
Given a non-negative integer represented as a non-empty array of digits, plus one to the integer.
You may assume the integer do not contain any leading zero, except the number 0 itself.
The digits are stored such that the most significant digit is at the head of the list.
解题思路:vector是有数组实现的,digits的每一个元素代表的是相应整数的每个位上的数字。
从个位数字(digits.size() - 1)往前扫,只要一个数字加上上一位的进位后不产生进位,即可将这个数字加1返回。如果直到最高位仍有进位,则在数组头部插入1,结果为1*****。
代码实现部分:
方法一:
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int r = 1;
for(int i = digits.size() - 1; i >= 0; i--){
int sum = digits[i] + 1;
digits[i] = sum % 10;
r = sum / 10;
if(r == 0) break;
}
if(r == 1)
{
digits.insert(digits.begin(), 1);
}
return digits;
}
};
方法二:(数组不用移位,用代替)
class Solution {
public:
vector<int> plusOne(vector<int> &digits) {
for(int i = digits.size()-1; i >= 0; i --){
if(digits[i] <= 8){
digits[i] += 1;
return digits;
}
else{ //digits[i] 为 9的时候
if(i != 0)
digits[i] = 0;
else{
digits[0] = 1;
digits.push_back(0);
return digits;
}
}
}
}
};