力扣题目链接
题目描述
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
代码
易错点:
*returnSize = digitsSize,不能写成 returnSize = digitsSize
memset(ret+1, 0, digitsSize * sizeof(int));
// memset第一个参数指向要填充的内存区域的指针,写 ret+1,不能写 ret[1]
// memset第三个参数是要设置的字节数,不要忘了乘 sizeof(int)
int* plusOne(int* digits, int digitsSize, int* returnSize) {
int i = digitsSize - 1;
// 若输入不全为 9,for 循环提前退出,退出后 i 指向从后往前数第一个非9的数字位置
// 若输入全为 9,for 循环结束后 i == -1,malloc一个新数组,第一位置为1,后边全置为0
for( ; i >= 0; i--){
if(digits[i] < 9){
break;
}
}
if(i == digitsSize - 1){ // 最后一位 < 9,只改最后一位
digits[i] += 1;
*returnSize = digitsSize;
return digits;
}else if(i >= 0){ // 最后一位 == 9,输入非全为 9,将 i 后边的数字置为 0
digits[i] += 1;
*returnSize = digitsSize;
memset(digits+i+1, 0, (digitsSize-i-1) * sizeof(int));
return digits;
}else{ // i < 0,输入全为 9
*returnSize = digitsSize + 1;
int *ret = (int*)malloc(sizeof(int) * (digitsSize + 1));
ret[0] = 1;
memset(ret+1, 0, digitsSize * sizeof(int));
return ret;
}
return NULL;
}