文章目录
解题思路
根据题目可以得出此题一共有3种需要特殊判断的地方。
1.数组元素的最后一个元素是否为9,如果是那就将此处元素置0,如果不是那就此处元素加1。按照这个逻辑将digits数组重新赋值。
2.判断重新赋值的digits数组的首元素是否是0,如果是就需要申请一个digitsSize+1的空间来存储数组,如果不是就直接将digits数组返回,数组长度是digitsSize。
代码
c
int* plusOne(int* digits, int digitsSize, int* returnSize)
{
int end = digitsSize - 1;
int *arr = NULL;
while(end + 1)/*end+1 是确保digits数组每一个元素都遍历到*/
{
/*元素为9就置0,不为9就加1*/
if(digits[end] == 9)
{
digits[end] = 0;
}
else
{
digits[end] = digits[end] + 1;
break;
}
end--;
}
/*判断重新赋值后的digits数组的首元素是否是0*/
if(0 == digits[0])/*特殊情况:需要申请的空间为digitsSize+1*/
{
/*arr数组为{1,0,0,0,..,0}*/
arr = (int *)malloc(sizeof(int) * (digitsSize + 1));
arr[0] = 1;
memset(&arr[1], 0, sizeof(int) * digitsSize);/*除了首元素其他元素置0*/
*returnSize =digitsSize + 1;
}
else/*常规情况,直接将digits数组数组返回即可*/
{
*returnSize =digitsSize;
return digits;
}
return arr;
}