前言:
Leetcode 每日刷题,从容易题目开始,坚持不懈是成功的一半,
喜欢的朋友欢迎订阅关注,欢迎大家留言交流,共同学习共同进步~~
题目介绍:https://leetcode.com/problems/plus-one/
d大型整数使用数组存储,数组每个元素代表一个位,
将数组表示的整数值加一后返回
解题思路:
从低位向高位处理,低位加一后若没有产生进位(该位非9),则处理结束,
若该位为9,则将其改为0,备注:if 先判断非9 则加一
情况1):最低位加一直接返回
情况2):非最低位,跑进if 非9,表示前一位有9产生进位,也需加一
若直到遍历完数组,也没有遇到非9元素,则代表输入例如999..
需要多进一位,数组头插1,变为1000,(借助memmove 实现array_add_head)
答案C语言版本:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
static void array_add_head(int *array, int array_size, int value)
{
memmove(array + 1, array, array_size * sizeof(int));
array[0] = value;
}
int* plusOne(int* digits, int digitsSize, int* returnSize){
uint32_t i = 0;
int *result = malloc((digitsSize + 1) * sizeof(int));
if (!digitsSize) {
*returnSize = 0;
return NULL;
}
for (i = 0; i < digitsSize; i++) {
if (digits[digitsSize - 1 - i] != 9) {
digits[digitsSize - 1 - i]++;
*returnSize = digitsSize;
memcpy(result, digits, digitsSize * sizeof(int));
return result;
} else {
digits[digitsSize - 1 - i] = 0;
}
}
memcpy(result, digits, digitsSize * sizeof(int));
*returnSize = digitsSize + 1;
array_add_head(result, digitsSize, 1);
return result;
}