leetcode 66. 加一(C语言)

题目:

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。

示例 2:

输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

代码(C语言)

执行结果:0ms,击败100%的用户
代码提交框要求:

/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */
#include
#include
int *plusOne(int* digits, int digitsSize, int* returnSize)//returnSize是一个数,何必传地址?
{
	int *ret_array = NULL;//*ret_array返回的数组指针;该数组动态申请内存
	int flag;//flag是进位标志
	int i;
	int count = 0;//用来记9的个数
	//刚输出发现题目中传入的returnSize居然是0,只能自己定义一下了
	for (i = 0; i < digitsSize; i++)
	{
		if (*(digits + i) == 9)count++;
		else break;
	}
	if (count == digitsSize) *returnSize = digitsSize + 1;
	else *returnSize = digitsSize;
	ret_array = (int *)malloc(*returnSize * sizeof(int));
	//复制数组
	if (digitsSize == *returnSize)//如果输入输出数组长度相等,则对应位相复制
	{
		for (i = 0; i < digitsSize; i++)
		{
			*(ret_array + i) = *(digits + i);
		}
	}
	else//如果输入输出数组长度不等,错位赋值,另第一位为1
	{
		*(ret_array + 0) = 0;
		for (i = 0; i < digitsSize; i++)
		{
			*(ret_array + i + 1) = *(digits + i);
		}
	}
	//自己实现加法的思路如下
	//定义flag=1
	//从最后一位开始,如果flag=1,则这一位加1
	//让flag=0
	//(现在)如果这一位是10,则flag=1,这一位归0
	flag = 1;
	for (i = *returnSize - 1; i >= 0; i--)
	{
		if (flag == 1)
		{
			*(ret_array + i) = *(ret_array + i) + 1;
		}
		flag = 0;
		if (*(ret_array + i) == 10)
		{
			*(ret_array + i) = 0;
			flag = 1;
		}
	}
	return ret_array;
}
int main()
{
	int i;
	int digits[] = { 9,9,9,9,9,9,9,9,9 };//原数组
	int *array;//用于接收函数返回的指针
	int returnSize = 10;//返回数组的大小(给定)
	array = plusOne(digits, 9, &returnSize);//函数调用
	//输出返回的数组
	for (i = 0; i < returnSize; i++)
	{
		printf("%d ", array[i]);
	}
	system("pause");
}

你可能感兴趣的:(leetcode 66. 加一(C语言))