Solve 66. Plus One
This commit is contained in:
parent
eabc14e3e5
commit
6f12b214ee
|
@ -0,0 +1,96 @@
|
||||||
|
/** 66. Plus One */
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
int *plusOne(int *digits, int digitsSize, int *returnSize) {
|
||||||
|
int i = 0;
|
||||||
|
int *newDigits = calloc(digitsSize + 1, sizeof(int));
|
||||||
|
for (i = 0; i < digitsSize; i++) {
|
||||||
|
newDigits[i+1] = digits[i];
|
||||||
|
assert(newDigits[i+1] < 10 && newDigits[i+1] >= 0);
|
||||||
|
}
|
||||||
|
i = digitsSize;
|
||||||
|
do {
|
||||||
|
newDigits[i]++;
|
||||||
|
if (newDigits[i] == 10) {
|
||||||
|
newDigits[i] = 0;
|
||||||
|
i--;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (i >= 0);
|
||||||
|
if (i == 0) {
|
||||||
|
*returnSize = digitsSize + 1;
|
||||||
|
} else {
|
||||||
|
newDigits++;
|
||||||
|
*returnSize = digitsSize;
|
||||||
|
}
|
||||||
|
return newDigits;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool equal(int *nums1, int *nums2, int len) {
|
||||||
|
for (int i = 0; i < len; i++) {
|
||||||
|
if (nums1[i] != nums2[i])
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void printDigits(int *digits, int digitsSize) {
|
||||||
|
for (int i = 0; i < digitsSize; i++) {
|
||||||
|
printf("%d", digits[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_1() {
|
||||||
|
int nums[] = {1, 9};
|
||||||
|
int expected[] = {2, 0};
|
||||||
|
int len = 0;
|
||||||
|
int *result = plusOne(nums, 2, &len);
|
||||||
|
printDigits(result, len);
|
||||||
|
assert(len == 2);
|
||||||
|
assert(equal(result, expected, len));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void test_2() {
|
||||||
|
int *nums = malloc(0 * sizeof(int));
|
||||||
|
int expected[] = {1};
|
||||||
|
int len = 0;
|
||||||
|
int *result = plusOne(nums, 0, &len);
|
||||||
|
printDigits(result, len);
|
||||||
|
assert(len == 1);
|
||||||
|
assert(equal(result, expected, len));
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_3() {
|
||||||
|
int nums[] = {1, 9, 9};
|
||||||
|
int expected[] = {2, 0, 0};
|
||||||
|
int len = 0;
|
||||||
|
int *result = plusOne(nums, 3, &len);
|
||||||
|
printDigits(result, len);
|
||||||
|
assert(len == 3);
|
||||||
|
assert(equal(result, expected, len));
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_4() {
|
||||||
|
int nums[] = {9};
|
||||||
|
int expected[] = {1, 0};
|
||||||
|
int len = 0;
|
||||||
|
int *result = plusOne(nums, 1, &len);
|
||||||
|
printDigits(result, len);
|
||||||
|
assert(len == 2);
|
||||||
|
assert(equal(result, expected, len));
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
test_1();
|
||||||
|
test_2();
|
||||||
|
test_3();
|
||||||
|
test_4();
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue