LeetCode 66 Plus One 题目链接 解题语言 : C
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123。 示例 2:
输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。
我的思路 : 先从末位进行加法 , 逢 10 进 1 , 但对 首位 即最高位进行特殊处理 因为要扩大数组长度
待解决问题 , 欢迎指导 : 如何解决 函数中 指针 p 的内存释放问题 ?
int* plusOne(int* digits, int digitsSize, int* returnSize) {
//int *p = (int *)malloc(sizeof(returnSize));
*(digits + digitsSize - 1) += 1;
//printf("%d ", *(digits + digitsSize - 1));
for (int i = digitsSize-1; i >=1 ; i--)
{
if (*(digits + i)==10)//从个位开始做加法 , 满 10 进 1
{
*(digits + i) = 0;
*(digits + i - 1) += 1;
}
}
if (digits[0]==10)// 处理位数问题 , 当首位为 10 时 数组长度 +1
{
*returnSize=digitsSize + 1;
int *p = (int *)malloc(sizeof(int)*(*returnSize));
p[0] = 1;
for (int i = 1; i < (*returnSize); i++)
p[i] = 0;
return p;
}
*returnSize = digitsSize;
return digits;
}