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