LeetCode初级算法-数组-7

题目:加一
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 也无法彻底解决这个问题。