aboutsummaryrefslogtreecommitdiffstats
path: root/leetcode
diff options
context:
space:
mode:
Diffstat (limited to 'leetcode')
-rw-r--r--leetcode/0001/main.c24
-rw-r--r--leetcode/0020/main.c43
-rw-r--r--leetcode/0027/main.c12
-rw-r--r--leetcode/0258/main.c18
-rw-r--r--leetcode/0744/main.c33
-rw-r--r--leetcode/2235/main.c3
-rw-r--r--leetcode/2236/main.c11
-rw-r--r--leetcode/2413/main.c3
-rw-r--r--leetcode/2469/main.c11
-rw-r--r--leetcode/2833/main.c21
-rw-r--r--leetcode/3379/main.c25
-rw-r--r--leetcode/3637/main.c42
-rw-r--r--leetcode/3783/main.c14
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));
+}