加一

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

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

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。

示例 2:

输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321

python实现代码:

class Solution:
    def plusOne(self, digits):
        """
        :type digits: List[int]
        :rtype: List[int]
        """
        i = len(digits) -1
        while i >= 0:
            if digits[i] != 9:
                digits[i] += 1
                return digits[:]
            else:
                digits[i] = 0
                i -= 1
        if i == -1:
            digits.insert(0, 1)
            return digits[:]
            
            

if __name__ == '__main__':
    test_case = [9]

    my_solution = Solution()
    print(my_solution.plusOne(test_case))

C实现代码:

#include <stdio.h>
#include <stdlib.h>

void arrayPrint(int *array, int* size) 
{
	int i;
	for (i = 0; i < *size; i++)
		printf("%d ", array[i]);
	printf("\n");
 } 
 
 /**
 * 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;
    *returnSize = digitsSize;
    int i;
    for (i = digitsSize-1; i >= 0; i--) {
    	if (carry == 0) {
    		return digits;		
		}
		int temp = digits[i] + carry;
		carry = temp / 10;
		digits[i] = temp % 10;
	}
	
	if (carry != 0) {
		int* result = (int*)malloc(sizeof(int) * (digitsSize+1));
		result[0] = 1;
		int i;
		for (i = 1; i < (digitsSize+1); i++) 
			result[i] = 0;
		*returnSize = digitsSize + 1;
		return result;
	}
	
	return digits;
}

 int main()
 {
 	int array[] = {9, 9};
 	
 	int *size = (int*)malloc(sizeof(int));
 	int *sum = plusOne(array, 2, size);
 	arrayPrint(sum, size);
 	free(sum);
 	free(size);

 	return 0;
 }
 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值