diff options
| author | Mistivia <i@mistivia.com> | 2025-09-06 23:17:22 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-09-06 23:17:41 +0800 |
| commit | ad95cba8220e2a7c86362caeb76e1a4333e9c2b8 (patch) | |
| tree | 30b31d94e2ceb46d4e946bfa1eb88b956508f760 /0066/main.c | |
| parent | 5dd8dcdc2ccfa89d25a3cb342a2f89c644236971 (diff) | |
refactor
Diffstat (limited to '0066/main.c')
| -rw-r--r-- | 0066/main.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/0066/main.c b/0066/main.c new file mode 100644 index 0000000..b01eb8b --- /dev/null +++ b/0066/main.c @@ -0,0 +1,38 @@ +#include <stdlib.h> + +// begin + +/** + * Note: The returned array must be malloced, assume caller calls free(). + */ +int* plusOne(int* digits, int digitsSize, int* returnSize) { + int *buffer = malloc((digitsSize + 1) * sizeof(int)); + for (int i = 0; i < digitsSize; i++) { + buffer[i] = digits[digitsSize - 1 - i]; + } + buffer[0]++; + int carry = 0; + for (int i = 0; i < digitsSize; i++) { + int val = buffer[i] + carry; + carry = val / 10; + buffer[i] = val % 10; + } + int len = digitsSize; + if (carry) { + len++; + buffer[digitsSize] = 1; + } + int lp = 0, rp = len - 1; + while (lp <= rp) { + int t = buffer[lp]; + buffer[lp] = buffer[rp]; + buffer[rp] = t; + lp++; + rp--; + } + *returnSize = len; + return buffer; +} + +// end + |
