题目描述
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位,数组中每个元素只存储单个数字。你可以假设除了整数0之外,这个整数不会以零开头。
解题思路
该题意思是将整个数组视为一个数,即最后一位视为个位,倒数第二位视为十位,以此类推。最终目的是输出这个数加一的结果。
我们知道 9+1 = 10,99+1 = 100,也就是说逢9进一。所以很自然的想到从最后一位往前看,如果是9,那么直接将这一位数字设为0,并继续向前查看,知道数字不是9,在该位数字加一。
int i = digitsSize - 1;
while(i > -1 && digits[i] == 9){
digits[i] = 0;
i--;
}
需要额外注意的是,如果给的数字是每一位都是9,需要输出的数的位数增加了一位,需要特殊处理。
*returnSize = digitsSize + 1;
int *newDigits = (int *)malloc(sizeof(int)*(digitsSize + 1));
newDigits[0] = 1;
for (i = 1; i <= digitsSize; i++){
newDigits[i] = 0;
}
return newDigits;
解答
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* plusOne(int* digits, int digitsSize, int* returnSize){
int i = digitsSize - 1;
while(i > -1 && digits[i] == 9){
digits[i] = 0;
i--;
}
if(i < 0){
*returnSize = digitsSize + 1;
int *newDigits = (int *)malloc(sizeof(int)*(digitsSize + 1));
newDigits[0] = 1;
for (i = 1; i <= digitsSize; i++){
newDigits[i] = 0;
}
return newDigits;
}else{
digits[i]++;
}
*returnSize = digitsSize;
return digits;
}
结果
跑了几次,这是最好的一次结果
状态:通过
执行用时: 0 ms
内存消耗: 5.6 MB