题目:
给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。
算法过程:其实就是高精度加法,这里题目已经非常友好了,因为只需要加1,也就是说进位我们只用考虑个位为9的情况。
如果个位为9,我们进一并且去看十位是否为9,直到找到一位不为9。如果个位不为9,则只需把各位加1即可。
Python代码:
class Solution:
def plusOne(self, digits):
"""
:type digits: List[int]
:rtype: List[int]
"""
#先舔一位在前面作备用,可能用也用不到
digits = [0] + digits
m = len(digits) - 1
digits[m] = digits[m] + 1
while m - 1 >= 0 and digits[m]> 9:
#进位
digits[m] = digits[m] - 10
digits[m-1] += 1
m -= 1
#如果第一位没用上,就别传第一位
if digits[0] == 0:
return digits[1:]
else:
return digits
C++
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int j = digits.size() - 1;
//先把个位加1
digits[j] += 1;
while (j >= 0 and digits[j] > 9){
//进位
digits[j] = 0;
if (j >= 1) digits[j-1] += 1;
//如果是原数字的最高项,则在前面添个1
else digits.insert(digits.begin(),1);
//把j向更高位推动
j -= 1;
}
return digits;
}
};
总的来说还是比较简单的题目,但用C++写一遍还是能学到点东西。比如如何向vector最前面添加元素,应该使用insert(vector.begin(), ele) 的方法来实现。