给一个由整数组成的数组表示非负整数,在该数的基础上加一,并且每个数组的元素只存储单个数字,除整数0之外,这个整数不会以0开头。
例如:
输入:digits=[ 1,1,9 ]
输出:[ 1,2,0 ]
输入:digits=[ 9,9 ]
输出:[ 1,0,0 ]
思路:分三种情况
1.末尾不是9 ,,,直接末尾加一,返回数组
2.末尾是9 ,,,末尾归零,向前遍历,找出不是9的元素,进行加一操作,返回数组
3.所有元素都是9,,,重新分配数组的空间(原来空间的基础上加一个整形变量的空间),第一个元素为1,其他所有元素归0
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* plusOne(int* digits, int digitsSize, int* returnSize){
if(digits[digitsSize-1]!=9){ //末尾不是9
digits[digitsSize-1]++;
*returnSize=digitsSize;
return digits;
}
for(int i=digitsSize-1;i>=0;i--){ //末尾是9
if(digits[i]!=9){ //找出不是9的字符,进行加一操作
*returnSize=digitsSize;
digits[i]++;
return digits;
}
digits[i]=0; //若字符是9,全部变成0
}
*returnSize=digitsSize+1;//数组中的字符全是9,数组需要加上一个int型变量所占的空间
digits=(int *)realloc(digits,*returnSize*sizeof(int));//重新分配空间
digits[digitsSize]=0;//
digits[0]=1;
return digits;
}