leetcode66题 题解 翻译 C语言版 Python版

66. Plus One

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.

66.加一

给定一个由数字数组表示的非负整数,给它加上一。

数字存储方式是表头为高位。


思路:对于c这样需要分配好数组大小的语言来说,如果整个数加1后最高位没有进位,那么可以分配与原数组长度一致的新数组,但如果最高位有进位时,数组长度就要加1。最高位有进位当且仅当当前的所有位都为9时,所以最开始可以遍历一遍数组,只要有一个不为9,那么就和原数组长度一致。进位操作很简单,从数组最后一位开始遍历,大于9就进位,小于9不进位。

如果是python等操作数组较方便的语言,可以最后时再在数组前面插入一个元素。注意用python时没有要求分配新的list,只需要修改原来传入的list即可,但最后要返回


/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* plusOne(int* digits, int digitsSize, int* returnSize) {
    int carry = 1;
    for (int i = 0; i < digitsSize; i++){
        if (digits[i] != 9){
            carry = 0;
            break;
        }
    }
    int* plusone = (int*)malloc(sizeof(int)*(digitsSize+carry));
    if (carry){
        plusone[0] = 1;
    }
    int p = 1;
    for (int i = digitsSize - 1; i >= 0; i--){
        plusone[i+carry] = digits[i] + p;
        if (plusone[i+carry] > 9){
            plusone[i+carry] -= 10;
            p = 1;
        }
        else{
            p = 0;
        }
    }
    *returnSize = digitsSize+carry;
    return plusone;
}


class Solution(object):
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        carry = 1
        for i in range(0, len(digits))[::-1]:
            digits[i] += carry
            if digits[i] > 9:
                digits[i] -= 10
                carry = 1
            else:
                carry = 0
        if carry > 0:
            digits.insert(0, 1)
        return digits


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值