Skip to content

Commit c10dfbf

Browse files
committed
Solution of 0016 and 0017 done in c language
1 parent 3340e31 commit c10dfbf

File tree

6 files changed

+172
-0
lines changed

6 files changed

+172
-0
lines changed

solution/0000-0099/0016.3Sum Closest/README.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,34 @@ class Solution {
315315
}
316316
```
317317

318+
#### C
319+
320+
``` C
321+
int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; }
322+
323+
int threeSumClosest(int *nums, int numsSize, int target) {
324+
qsort(nums, numsSize, sizeof(int), cmp);
325+
int closest = nums[0] + nums[1] + nums[2];
326+
327+
for (int i = 0; i < numsSize - 2; i++) {
328+
int j = i + 1, k = numsSize - 1;
329+
while (j < k) {
330+
int sum = nums[i] + nums[j] + nums[k];
331+
if (abs(sum - target) < abs(closest - target)) {
332+
closest = sum;
333+
}
334+
if (sum < target)
335+
j++;
336+
else
337+
k--;
338+
}
339+
}
340+
341+
return closest;
342+
}
343+
344+
```
345+
318346
<!-- tabs:end -->
319347
320348
<!-- solution:end -->

solution/0000-0099/0016.3Sum Closest/README_EN.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,34 @@ class Solution {
314314
}
315315
```
316316

317+
#### C
318+
319+
``` C
320+
int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; }
321+
322+
int threeSumClosest(int *nums, int numsSize, int target) {
323+
qsort(nums, numsSize, sizeof(int), cmp);
324+
int closest = nums[0] + nums[1] + nums[2];
325+
326+
for (int i = 0; i < numsSize - 2; i++) {
327+
int j = i + 1, k = numsSize - 1;
328+
while (j < k) {
329+
int sum = nums[i] + nums[j] + nums[k];
330+
if (abs(sum - target) < abs(closest - target)) {
331+
closest = sum;
332+
}
333+
if (sum < target)
334+
j++;
335+
else
336+
k--;
337+
}
338+
}
339+
340+
return closest;
341+
}
342+
343+
```
344+
317345
<!-- tabs:end -->
318346
319347
<!-- solution:end -->
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
2+
int cmp(const void* a, const void* b) { return *(int*) a - *(int*) b; }
3+
4+
int threeSumClosest(int* nums, int numsSize, int target) {
5+
qsort(nums, numsSize, sizeof(int), cmp);
6+
int closest = nums[0] + nums[1] + nums[2];
7+
8+
for (int i = 0; i < numsSize - 2; i++) {
9+
int j = i + 1, k = numsSize - 1;
10+
while (j < k) {
11+
int sum = nums[i] + nums[j] + nums[k];
12+
if (abs(sum - target) < abs(closest - target)) {
13+
closest = sum;
14+
}
15+
if (sum < target)
16+
j++;
17+
else
18+
k--;
19+
}
20+
}
21+
22+
return closest;
23+
}

solution/0000-0099/0017.Letter Combinations of a Phone Number/README.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,39 @@ class Solution {
555555
}
556556
```
557557

558+
#### C
559+
560+
``` C
561+
char *map[] = {"", "", "abc", "def", "ghi",
562+
"jkl", "mno", "pqrs", "tuv", "wxyz"};
563+
564+
void backtrack(char *d, int i, char *cur, char **res, int *sz) {
565+
if (!d[i]) {
566+
res[(*sz)++] = strdup(cur);
567+
return;
568+
}
569+
for (char *p = map[d[i] - '0']; *p; p++) {
570+
cur[i] = *p;
571+
backtrack(d, i + 1, cur, res, sz);
572+
}
573+
}
574+
575+
char **letterCombinations(char *d, int *sz) {
576+
*sz = 0;
577+
if (!*d)
578+
return NULL;
579+
int max = 1, len = strlen(d);
580+
for (int i = 0; i < len; i++)
581+
max *= (d[i] == '7' || d[i] == '9') ? 4 : 3;
582+
char **res = malloc(max * sizeof(char *)), *cur = malloc(len + 1);
583+
cur[len] = '\0';
584+
backtrack(d, 0, cur, res, sz);
585+
free(cur);
586+
return res;
587+
}
588+
589+
```
590+
558591
<!-- tabs:end -->
559592
560593
<!-- solution:end -->

solution/0000-0099/0017.Letter Combinations of a Phone Number/README_EN.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,39 @@ class Solution {
551551
}
552552
```
553553

554+
#### C
555+
556+
``` C
557+
char *map[] = {"", "", "abc", "def", "ghi",
558+
"jkl", "mno", "pqrs", "tuv", "wxyz"};
559+
560+
void backtrack(char *d, int i, char *cur, char **res, int *sz) {
561+
if (!d[i]) {
562+
res[(*sz)++] = strdup(cur);
563+
return;
564+
}
565+
for (char *p = map[d[i] - '0']; *p; p++) {
566+
cur[i] = *p;
567+
backtrack(d, i + 1, cur, res, sz);
568+
}
569+
}
570+
571+
char **letterCombinations(char *d, int *sz) {
572+
*sz = 0;
573+
if (!*d)
574+
return NULL;
575+
int max = 1, len = strlen(d);
576+
for (int i = 0; i < len; i++)
577+
max *= (d[i] == '7' || d[i] == '9') ? 4 : 3;
578+
char **res = malloc(max * sizeof(char *)), *cur = malloc(len + 1);
579+
cur[len] = '\0';
580+
backtrack(d, 0, cur, res, sz);
581+
free(cur);
582+
return res;
583+
}
584+
585+
```
586+
554587
<!-- tabs:end -->
555588
556589
<!-- solution:end -->
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
char* map[] = {"", "", "abc", "def", "ghi",
2+
"jkl", "mno", "pqrs", "tuv", "wxyz"};
3+
4+
void backtrack(char* d, int i, char* cur, char** res, int* sz) {
5+
if (!d[i]) {
6+
res[(*sz)++] = strdup(cur);
7+
return;
8+
}
9+
for (char* p = map[d[i] - '0']; *p; p++) {
10+
cur[i] = *p;
11+
backtrack(d, i + 1, cur, res, sz);
12+
}
13+
}
14+
15+
char** letterCombinations(char* d, int* sz) {
16+
*sz = 0;
17+
if (!*d)
18+
return NULL;
19+
int max = 1, len = strlen(d);
20+
for (int i = 0; i < len; i++)
21+
max *= (d[i] == '7' || d[i] == '9') ? 4 : 3;
22+
char **res = malloc(max * sizeof(char*)), *cur = malloc(len + 1);
23+
cur[len] = '\0';
24+
backtrack(d, 0, cur, res, sz);
25+
free(cur);
26+
return res;
27+
}

0 commit comments

Comments
 (0)