66-简单-加一

在这里插入图片描述
解题思路,如果最后一位小于9,加一不用进位,对数组复制一下就输出,最后一位是9,加一则需要进位,极端情况是每一位都是9,则数组元素要多一位

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* plusOne(int* digits, int digitsSize, int* returnSize){
    int i= 0;
    int* array = NULL;
    *returnSize = digitsSize;
    /* 先确定是否需要多申请一个元素的变量,个位是9*/
    if (9 == digits[digitsSize-1]){
        i = digitsSize;
        /* 判断每一位是否都是9 */
        while (i--){
           if(9 != digits[i]){
               break;
           } 
        }
        /* 判断每一位是否都是9 */
        if (-1 == i){
            array = malloc((digitsSize+1) * sizeof(int));
            *returnSize += 1;
            array[digitsSize] = 0; 
        }else{
            array = malloc(digitsSize * sizeof(int));
        }
    }else{
        array = malloc(digitsSize * sizeof(int));
    }
    memcpy(array, digits, digitsSize * sizeof(int)); 
    array[digitsSize-1] += 1;
    while (digitsSize--){
        if(array[digitsSize] < 10){
            break;
        }
        /* array[digitsSize] = 10 */
        if(digitsSize > 0){
            array[digitsSize] = 0;
            array[digitsSize - 1] += 1;
        }else{
        	/* 需要进位输出 */
            array[digitsSize] = 1;
        }
    }
    return array;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lala0903/article/details/107588364
今日推荐