解题思路,如果最后一位小于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;
}