diff options
Diffstat (limited to 'leetcode')
| -rw-r--r-- | leetcode/0001/main.c | 24 | ||||
| -rw-r--r-- | leetcode/0020/main.c | 43 | ||||
| -rw-r--r-- | leetcode/0027/main.c | 12 | ||||
| -rw-r--r-- | leetcode/0258/main.c | 18 | ||||
| -rw-r--r-- | leetcode/0744/main.c | 33 | ||||
| -rw-r--r-- | leetcode/2235/main.c | 3 | ||||
| -rw-r--r-- | leetcode/2236/main.c | 11 | ||||
| -rw-r--r-- | leetcode/2413/main.c | 3 | ||||
| -rw-r--r-- | leetcode/2469/main.c | 11 | ||||
| -rw-r--r-- | leetcode/2833/main.c | 21 | ||||
| -rw-r--r-- | leetcode/3379/main.c | 25 | ||||
| -rw-r--r-- | leetcode/3637/main.c | 42 | ||||
| -rw-r--r-- | leetcode/3783/main.c | 14 |
13 files changed, 260 insertions, 0 deletions
diff --git a/leetcode/0001/main.c b/leetcode/0001/main.c new file mode 100644 index 0000000..d847e1b --- /dev/null +++ b/leetcode/0001/main.c @@ -0,0 +1,24 @@ +/** + * Note: The returned array must be malloced, assume caller calls free(). + * 这是一个暴力解法 + */ +#include <stdio.h> +#include <stdlib.h> + +int *twoSum(int *nums, int numsSize, int target, int *returnSize) { + int nums_max_idx = numsSize - 1; + for (int i = 0; i < nums_max_idx; i++) { + for (int j = i + 1; j <= nums_max_idx; j++) { + if (nums[i] + nums[j] == target) { + int *rtn = malloc(sizeof(int) * 2); + rtn[0] = i; + rtn[1] = j; + *returnSize = 2; + return rtn; + } + } + } + + *returnSize = 0; + return NULL; +} diff --git a/leetcode/0020/main.c b/leetcode/0020/main.c new file mode 100644 index 0000000..cf3a4dd --- /dev/null +++ b/leetcode/0020/main.c @@ -0,0 +1,43 @@ +#include <stdbool.h> +#include <stdlib.h> +#include <string.h> + +bool isValid(char *s) { + int n = strlen(s); + if (n < 2) + return false; + + char *stack = (char *)malloc(sizeof(char) * (n + 1)); + int top = -1; + + for (int i = 0; i < n; i++) { + char ch = s[i]; + + if (ch == '(' || ch == '[' || ch == '{') { + stack[++top] = ch; + } else { + if (top == -1) { + return false; + } + + char topChar = stack[top--]; + + if (ch == ')' && topChar != '(') { + free(stack); + return false; + } + if (ch == ']' && topChar != '[') { + free(stack); + return false; + } + if (ch == '}' && topChar != '{') { + free(stack); + return false; + } + } + } + + bool result = (top == -1); + free(stack); + return result; +} diff --git a/leetcode/0027/main.c b/leetcode/0027/main.c new file mode 100644 index 0000000..250deaf --- /dev/null +++ b/leetcode/0027/main.c @@ -0,0 +1,12 @@ +int removeElement(int *nums, int numsSize, int val) { + int k = 0; + + for (int i = 0; i < numsSize; i++) { + if (nums[i] != val) { + nums[k] = nums[i]; + k++; + } + } + + return k; +} diff --git a/leetcode/0258/main.c b/leetcode/0258/main.c new file mode 100644 index 0000000..488e06e --- /dev/null +++ b/leetcode/0258/main.c @@ -0,0 +1,18 @@ +#include <stdio.h> +int addDigits(int num) { + while (num >= 10) { + int sum = 0; + while (sum > 0) { + sum += num % 10; + num /= 10; + } + num = sum; + } + + return num; +} + + +int main() { + return 0; +} diff --git a/leetcode/0744/main.c b/leetcode/0744/main.c new file mode 100644 index 0000000..e94a22e --- /dev/null +++ b/leetcode/0744/main.c @@ -0,0 +1,33 @@ +#include <stdio.h> +#include <stdlib.h> + +// 群友:你赢了,你的码风小众又变态 +int cmp(const void *a,const void *b){return *(char*)a-*(char*)b;} +char _nextGreatestLetter(char *letters, int lettersSize, char target) { + int j=0; + for (int i=0; i<lettersSize;i++){if(letters[i]>target){j++;}} + if(j==0) return letters[0]; + char*k=malloc(sizeof(char)*j); + int q=0; + for (int i=0;i<lettersSize;i++){if(letters[i]>target){k[q] = letters[i];q++;}} + qsort(k,j,sizeof(char),cmp); + return k[0]; +} + +// 正常人写法: +char nextGreatestLetter(char* letters, int lettersSize, char target) { + for(int i = 0; i < lettersSize; i++) { + if(letters[i] > target) { + return letters[i]; + } + } + + return letters[0]; +} + +int main() { + char letters[] = {'c', 'f', 'j'}; + int sz = sizeof(letters) / sizeof(letters[0]); + char target = 'c'; + char rtn = nextGreatestLetter(letters, sz, target); +} diff --git a/leetcode/2235/main.c b/leetcode/2235/main.c new file mode 100644 index 0000000..1910b3e --- /dev/null +++ b/leetcode/2235/main.c @@ -0,0 +1,3 @@ +int sum(int num1, int num2) { + return num1 + num2; +} diff --git a/leetcode/2236/main.c b/leetcode/2236/main.c new file mode 100644 index 0000000..b9c67c7 --- /dev/null +++ b/leetcode/2236/main.c @@ -0,0 +1,11 @@ +/** + * Definition for a binary tree node. + * struct TreeNode { + * int val; + * struct TreeNode *left; + * struct TreeNode *right; + * }; + */ +bool checkTree(struct TreeNode *root) { + return root->left->val + root->right->val == root->val; +} diff --git a/leetcode/2413/main.c b/leetcode/2413/main.c new file mode 100644 index 0000000..903d3f5 --- /dev/null +++ b/leetcode/2413/main.c @@ -0,0 +1,3 @@ +int smallestEvenMultiple(int n) { + return n * (1 + n % 2); +} diff --git a/leetcode/2469/main.c b/leetcode/2469/main.c new file mode 100644 index 0000000..0ea6e06 --- /dev/null +++ b/leetcode/2469/main.c @@ -0,0 +1,11 @@ +/** + * Note: The returned array must be malloced, assume caller calls free(). + */ +double* convertTemperature(double celsius, int* returnSize) { + *returnSize = 2; + double* rtn = malloc(sizeof(double) * *returnSize); + rtn[0] = celsius + 273.15; + rtn[1] = celsius * 1.80 + 32.00; + + return rtn; +} diff --git a/leetcode/2833/main.c b/leetcode/2833/main.c new file mode 100644 index 0000000..1e17eb0 --- /dev/null +++ b/leetcode/2833/main.c @@ -0,0 +1,21 @@ +#include <stdlib.h> +#include <string.h> + +int furthestDistanceFromOrigin(char *moves) { + int len = strlen(moves); + int L = 0; + int R = 0; + int B = 0; + + for (int i = 0; i < len; i++) { + if (moves[i] == 'L') { + L++; + } else if (moves[i] == 'R') { + R++; + } else { + B++; + } + } + + return abs(L - R) + B; +} diff --git a/leetcode/3379/main.c b/leetcode/3379/main.c new file mode 100644 index 0000000..ef62b87 --- /dev/null +++ b/leetcode/3379/main.c @@ -0,0 +1,25 @@ +#include <stdlib.h> +#include <math.h> + + +/** + * Note: The returned array must be malloced, assume caller calls free(). + */ +int* constructTransformedArray(int* nums, int numsSize, int* returnSize) { + int* result = malloc(sizeof(int) * numsSize); + *returnSize = numsSize; + + for(int i = 0; i < numsSize; i++) { + if (nums[i] == 0) { + result[i] = 0; + } else { + int j = (i + nums[i]) % numsSize; + if (j < 0) { + j += numsSize; + } + result[i] = nums[j]; + } + } + + return result; +} diff --git a/leetcode/3637/main.c b/leetcode/3637/main.c new file mode 100644 index 0000000..6f5cf7d --- /dev/null +++ b/leetcode/3637/main.c @@ -0,0 +1,42 @@ +#include <stdbool.h> +bool isTrionic(int *nums, int numsSize) { + if (numsSize < 4) { + return false; + } + + // 防止[9,4,6,8] + if (nums[0] > nums[1]) { + return false; + } + + enum { UP1, DOWN, UP2 } state = UP1; + + // 状态机真好玩嘻嘻嘻 + for (int i = 0; i < numsSize - 1; i++) { + if (nums[i] == nums[i + 1]) { + return false; + } + + if (state == UP1) { + if (nums[i] < nums[i + 1]) { + continue; + } else { + state = DOWN; + } + } else if (state == DOWN) { + if (nums[i] > nums[i + 1]) { + continue; + } else { + state = UP2; + } + } else { // 既不等于UP1, 也不等于DOWN,就等于UP2 + if (nums[i] < nums[i + 1]) { + continue; + } else { + return false; + } + } + } + + return state == UP2; +} diff --git a/leetcode/3783/main.c b/leetcode/3783/main.c new file mode 100644 index 0000000..3d3fe1e --- /dev/null +++ b/leetcode/3783/main.c @@ -0,0 +1,14 @@ +#include <stdlib.h> + +int reverse(int n) { + int rev = 0; + while (n != 0) { + rev = rev * 10 + n % 10; + n /= 10; + } + return rev; +} + +int mirrorDistance(int n) { + return abs(n - reverse(n)); +} |
