aboutsummaryrefslogtreecommitdiff
path: root/Computer_Science/leetcode/66-plus_one.c
blob: 63d151c17895385aa948a5efdfeac61b62e29512 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* plusOne(int* digits, int digitsSize, int* returnSize) {
	int i;
	int in = 1;
	int *result;

	for(i = digitsSize - 1; i >=0; i--) {
		if(digits[i] == 9 && in == 1) {
			digits[i] = 0;
			in = 1;
		} else {
			digits[i] += in;
			in = 0;
		}
	}

	if(in == 1) {
		result = malloc(sizeof(int) * (digitsSize + 1));
		result[0] = 1;
		for(i = 1; i < digitsSize + 1; i++) {
			result[i] = digits[i-1];
		}
		*returnSize = digitsSize + 1;
	} else {
		result = digits;
		*returnSize = digitsSize;
	}

	return result;
}