leetcode--加一

加一

问题描述

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

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

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

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

示例2:

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

思路

这里的整数每一位都是存放在一个数组内的,按照加法运算,从数组的最后一位开始加一就行,需要处理的就是如果该位上是9,那加一就需要进位,该位变成零,如果该位小于9,则加一就终止;还有一种情况,如果各个位都是9,比如99,那加一就是100,这时,数组的长度变了,所以就看如果循环到了第一位,说明最后需要进位,那数组长度就加一。

代码

/**
 * 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 i;
    for(i=digitsSize-1;i>=0;i--)
    {
        if(digits[i]!=9) //该位小于9,加一后不会进位
        {
            digits[i]+=1;
            break;
        }
        else //该位等于9,加一需进位,该位变为0
        {
            digits[i]=0;
        }
    }
    if(i>=0) //说明没有循环到第一位
    {
        *returnSize=digitsSize;
        return digits;
    }
    else
    {
    	  // 用calloc函数,分配空间,并自动初始化数组为0
        int* ret=(int *)calloc(digitsSize+1,sizeof(int));
        if(ret==NULL) return NULL;
        ret[0]=1; //第一位变为1
        *returnSize=digitsSize+1;
        return ret;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41822647/article/details/85048115