题目描述
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: digits = [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: digits = [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
示例 3:
输入: digits = [0]
输出: [1]
分析
在写代码时,对c语言中的指针又明确了一些基础知识,在LeetCode中,该题目中,给了三个参数
int* digits, int digitsSize, int* returnSize(如果给了returnSize,必须要在最后给returnSize赋值,returnSize是一个简单类型,赋值的时候给指向returnSize的指针赋值即可),digitls是一个数组,*digits
是一个指向该数组的指针。
对数组进行加一操作,即对数组的最后一个数字进行加一,如果加一后结果小于10,则完成加一的操作,直接返回digits数组即可,注意返回的是digits数组,而不是*digits
(*digies
表示的是该数组的第一个元素。);如果加一后结果等于10,则对前一位进行上述操作,直到加到第一位后结果仍然等于10,说明原数组元素全部为9,则需要另外申请空间,空间大小为原来元素个数加一,第一个赋值为1,其余为按照digits赋值即可。
代码实现
int* plusOne(int* digits, int digitsSize, int* returnSize){
for(int i = digitsSize - 1; i >=0 ; i--){
digits[i]++;
if(digits[i] == 10){
digits[i] = 0;
}else{
*returnSize = digitsSize;
return digits;
}
}
int* res = (int*)malloce((digitsSize + 1) * sizeof(int));
res[0] = 1;
for(int j = 0;j < digitsSize; j++){
res[j+1] = digits[j];
}
*returnSize = digitsSize + 1;
return res;
}