LeetCode :初级算法_[数组]: 加一(C语言实现)

LeetCode :初级算法_[数组]: 加一


题目地址:
加一


加一

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

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

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

示例 1:

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

示例 2:

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


C语言版本实现方式:

int* plusOne(int* digits, int digitsSize, int* returnSize)
{
	int len = (1+digitsSize)*sizeof(int);
	int *returndigits = malloc(len);
	memset(returndigits, 0, len);
	
	digits[digitsSize-1] += 1;
	
	int t_len = digitsSize; //输出数组长度
	int offset=1; //偏移量 输出数组
	
	int i;
	for(i=digitsSize-1; i>=0; i--)
		{
			if(10 == digits[i])
			{
				if(0 == i)
				{
					t_len += 1;	//输出数组 :长度 加一
					offset = 0;	//输出数组 :偏移量 设为0
					returndigits[0] = 1;
				}
				else
				{
					returndigits[i+1] = 0; 
					digits[i-1] += 1;
				}
			}
			else
				returndigits[i+1] = digits[i];
		}
		
	*returnSize = t_len;

	return returndigits+offset;
}


1、申请一个比输入数组长度大一的内存空间。
2、标记,最后输出的数组地址偏移量(1/0)。
3、先给输入数组最后一个值加一。
4、如果输入数组中某个值为10,则数组数组中,对应该值为0。并把输入数组前一个值加一。
5、如果输入数组值不为10,则把输入数组的值赋值给输出数组。


LeetCode :初级算法_[数组]: 加一(C语言实现)_第1张图片


今天才发现,点击上图中灰色框框,可以看到其他人写的代码:

下面就是耗时0ms的程序:

LeetCode :初级算法_[数组]: 加一(C语言实现)_第2张图片

LeetCode :初级算法_[数组]: 加一(C语言实现)_第3张图片

LeetCode :初级算法_[数组]: 加一(C语言实现)_第4张图片

你可能感兴趣的:(LeetCode)