Leetcode 066 加一 Python C++

题目:

给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。

最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。

你可以假设除了整数 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) 的方法来实现。

猜你喜欢

转载自blog.csdn.net/weixin_41958153/article/details/81366977