LeetCode初级算法-数组-7
题目:加一
C语言解题
int* plusOne(int* digits, int digitsSize, int* returnSize) {
int *re = (int*)malloc(sizeof(int)*(digitsSize + 1));
int flag = 1;
int temp;
*returnSize = 0;
//plusOne
for (int i = digitsSize - 1; i >= 0; i--)
{
if (flag == 1)
{
re[*returnSize] = digits[i] + 1;
flag = 0;
}
else
re[*returnSize] = digits[i];
if ((int)(re[*returnSize] / 10) != 0)
{
re[*returnSize] = re[*returnSize] % 10;
flag = 1;
}
(*returnSize)++;
}
if (flag == 1)
{
re[(*returnSize)] = 1;
(*returnSize)++;
}
//reverse
for (int i = 0; i < ((*returnSize) / 2 ); i++)
{
temp = re[i];
re[i] = re[(*returnSize) - 1 - i];
re[(*returnSize) - 1 - i] = temp;
}
return re;
}
定义flag表示进位。
如果flag为1,则有进位,该位+1后除10取余;否则该位不变。
最后将re逆序。
错误解法:
int* plusOne(int* digits, int digitsSize, int* returnSize) {
int num = 0;
int *re = (int*)malloc(sizeof(int)*(digitsSize + 1));
*returnSize = digitsSize;
for (int i = 0; i < digitsSize; i++)
{
num *= 10;
num += digits[i];
}
num++;
if ((int)(num / pow(10, digitsSize)) != 0)
(*returnSize)++;
for (int i = *returnSize-1; i >=0 ; i--)
{
re[i] = num % 10;
num = num / 10;
}
return re;
}
解题思路:将数组元素转为数字,+1,再转为数组。
出错原因:将数组元素转为数字时,定义的是整型,数组元素很多导致数字超过整型的范围就会出错。long int,long long int 也无法彻底解决这个问题。