1.描述
Given a non-negative integer represented as a non-empty array of digits, plus one to the integer.
You may assume the integer do not contain any leading zero, except the number 0 itself.
The digits are stored such that the most significant digit is at the head of the list.
2.分析
3.代码
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int* plusOne(int* digits, int digitsSize, int* returnSize) {
if (NULL == digits || 0 >= digitsSize) exit(-1);
bool all_digits_are_9 = true;
for (unsigned int i = 0; i < digitsSize && all_digits_are_9; ++i) {
if (digits[i] != 9) all_digits_are_9 = false;
}
*returnSize = all_digits_are_9 ? digitsSize+1 : digitsSize;
int *array = (int*)malloc(sizeof(int) * (*returnSize));
if (NULL == array) exit(-1);
array[*returnSize - 1] = digits[digitsSize - 1] + 1;
int carry = array[*returnSize - 1] / 10;
array[*returnSize - 1] = array[*returnSize - 1] % 10;
for (int i = 1; i < digitsSize; ++i) {
array[*returnSize - i - 1] = digits[*returnSize - i - 1] + carry;
carry = array[*returnSize - i - 1] / 10;
array[*returnSize - i - 1] = array[*returnSize - i - 1] % 10;
}
if (carry) array[0] = carry;
return array;
}
网友评论