question:Given a non-negative number represented as an array of digits, plus one to the number.The digits are stored such that the most significant digit is at the head of the list.
题目分析:本题就是一个很普通的加一操作的题目,但是重点在于某一个数字的某一位或者某几位出现数字9时,有进位操作。这个才是本题需要解决的关键之处!这里我们提供两种思路,具体做法如下:
方法一:
将某一个数的某一位为9和非9分为两种情况具体处理情况如下图:
-
代码如下:
class Solution {
public:
vector<int> plusOne(vector<int> &digits) {
int n = digits.size();
for (int i = n - 1; i >= 0; --i) {
if (digits[i] == 9) digits[i] = 0;
else {
digits[i] += 1;
return digits;
}
}
if (digits.front() == 0) digits.insert(digits.begin(), 1);
return digits;
}
};
方法二
设置一个标志数为1,将digits[i]为9和非9不分开计算,但通过取模运算和除运算得到结果,如下图:
-
代码如下:
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
if (digits.empty()) return digits;
int carry = 1, n = digits.size();
for (int i = n - 1; i >= 0; --i) {
if (carry == 0) return digits;
int sum = digits[i] + carry;
digits[i] = sum % 10;
carry = sum / 10;
}
if (carry == 1) digits.insert(digits.begin(), 1);
return digits;
}
};