66加一

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/dreamLC1998/article/details/102692491

加一

题目描述:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:

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

输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321
解题思路:这一题就是在模拟我们初学多位数加法的方法,然后要注意的是C语言必须一开始就要声明一个固定大小的数组,所以要先确定返回的位数,如果全是9,那么+1之后,就要多一位,还有就是注意9+1之后进位的问题,仔细一点即可。
int* plusOne(int* digits, int digitsSize, int* returnSize){
    int i,size,count_9,jw,j;
    count_9=0;
    for(i=0;i<digitsSize;i++){
        if(digits[i]==9){
            count_9++;
        }
    }
    size=(count_9==digitsSize)?digitsSize+1:digitsSize;
    int *result=(int *)malloc(sizeof(int)*size);
    *returnSize=size;
    j=size-1;
    for(i=digitsSize-1;i>=0;i--){
        if(i==digitsSize-1){
            if(digits[i]+1==10){
                result[j]=0;
                j--;
                jw=1;
            }
            else{
                result[j]=digits[i]+1;
                j--;
                jw=0;
            }
        }  
        else{
            if(digits[i]+jw==10){
                result[j]=0;
                j--;
                jw=1;
            }
            else{
                result[j]=digits[i]+jw;
                j--;
                jw=0;
            }
        } 
    }
    if(jw==1){
        result[j]=1;
    }
    return result;
}

猜你喜欢

转载自blog.csdn.net/dreamLC1998/article/details/102692491
今日推荐