Skip to content

Commit 42a096e

Browse files
feat: add php solution to lc problems: No.0015-0020 (doocs#2363)
1 parent 63cea37 commit 42a096e

File tree

18 files changed

+779
-0
lines changed

18 files changed

+779
-0
lines changed

solution/0000-0099/0015.3Sum/README.md

+50
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,56 @@ def three_sum(nums)
383383
end
384384
```
385385

386+
```php
387+
class Solution {
388+
/**
389+
* @param int[] $nums
390+
* @return int[][];
391+
*/
392+
393+
function threeSum($nums) {
394+
$result = [];
395+
$n = count($nums);
396+
397+
sort($nums);
398+
for ($i = 0; $i < $n - 2; $i++) {
399+
if ($i > 0 && $nums[$i] === $nums[$i - 1]) {
400+
continue;
401+
}
402+
403+
$left = $i + 1;
404+
$right = $n - 1;
405+
406+
while ($left < $right) {
407+
$sum = $nums[$i] + $nums[$left] + $nums[$right];
408+
409+
if ($sum === 0) {
410+
$triplet = [$nums[$i], $nums[$left], $nums[$right]];
411+
$result[] = $triplet;
412+
413+
while ($left < $right && $nums[$left] === $nums[$left + 1]) {
414+
$left++;
415+
}
416+
417+
while ($left < $right && $nums[$right] === $nums[$right - 1]) {
418+
$right--;
419+
}
420+
421+
$left++;
422+
$right--;
423+
} elseif ($sum < 0) {
424+
$left++;
425+
} else {
426+
$right--;
427+
}
428+
}
429+
}
430+
431+
return $result;
432+
}
433+
}
434+
```
435+
386436
<!-- tabs:end -->
387437

388438
<!-- end -->

solution/0000-0099/0015.3Sum/README_EN.md

+50
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,56 @@ def three_sum(nums)
375375
end
376376
```
377377

378+
```php
379+
class Solution {
380+
/**
381+
* @param int[] $nums
382+
* @return int[][];
383+
*/
384+
385+
function threeSum($nums) {
386+
$result = [];
387+
$n = count($nums);
388+
389+
sort($nums);
390+
for ($i = 0; $i < $n - 2; $i++) {
391+
if ($i > 0 && $nums[$i] === $nums[$i - 1]) {
392+
continue;
393+
}
394+
395+
$left = $i + 1;
396+
$right = $n - 1;
397+
398+
while ($left < $right) {
399+
$sum = $nums[$i] + $nums[$left] + $nums[$right];
400+
401+
if ($sum === 0) {
402+
$triplet = [$nums[$i], $nums[$left], $nums[$right]];
403+
$result[] = $triplet;
404+
405+
while ($left < $right && $nums[$left] === $nums[$left + 1]) {
406+
$left++;
407+
}
408+
409+
while ($left < $right && $nums[$right] === $nums[$right - 1]) {
410+
$right--;
411+
}
412+
413+
$left++;
414+
$right--;
415+
} elseif ($sum < 0) {
416+
$left++;
417+
} else {
418+
$right--;
419+
}
420+
}
421+
}
422+
423+
return $result;
424+
}
425+
}
426+
```
427+
378428
<!-- tabs:end -->
379429

380430
<!-- end -->
+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
class Solution {
2+
/**
3+
* @param int[] $nums
4+
* @return int[][];
5+
*/
6+
7+
function threeSum($nums) {
8+
$result = [];
9+
$n = count($nums);
10+
11+
sort($nums);
12+
for ($i = 0; $i < $n - 2; $i++) {
13+
14+
if ($i > 0 && $nums[$i] === $nums[$i - 1]) {
15+
continue;
16+
}
17+
18+
$left = $i + 1;
19+
$right = $n - 1;
20+
21+
while ($left < $right) {
22+
$sum = $nums[$i] + $nums[$left] + $nums[$right];
23+
24+
if ($sum === 0) {
25+
$triplet = array($nums[$i], $nums[$left], $nums[$right]);
26+
$result[] = $triplet;
27+
28+
while ($left < $right && $nums[$left] === $nums[$left + 1]) {
29+
$left++;
30+
}
31+
32+
while ($left < $right && $nums[$right] === $nums[$right - 1]) {
33+
$right--;
34+
}
35+
36+
$left++;
37+
$right--;
38+
} elseif ($sum < 0) {
39+
$left++;
40+
} else {
41+
$right--;
42+
}
43+
}
44+
}
45+
46+
return $result;
47+
}
48+
}

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

+41
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,47 @@ var threeSumClosest = function (nums, target) {
216216
};
217217
```
218218

219+
```php
220+
class Solution {
221+
/**
222+
* @param int[] $nums
223+
* @param int $target
224+
* @return int
225+
*/
226+
227+
function threeSumClosest($nums, $target) {
228+
$n = count($nums);
229+
$closestSum = $nums[0] + $nums[1] + $nums[2];
230+
$minDiff = abs($closestSum - $target);
231+
232+
sort($nums);
233+
234+
for ($i = 0; $i < $n - 2; $i++) {
235+
$left = $i + 1;
236+
$right = $n - 1;
237+
238+
while ($left < $right) {
239+
$sum = $nums[$i] + $nums[$left] + $nums[$right];
240+
$diff = abs($sum - $target);
241+
242+
if ($diff < $minDiff) {
243+
$minDiff = $diff;
244+
$closestSum = $sum;
245+
} elseif ($sum < $target) {
246+
$left++;
247+
} elseif ($sum > $target) {
248+
$right--;
249+
} else {
250+
return $sum;
251+
}
252+
}
253+
}
254+
255+
return $closestSum;
256+
}
257+
}
258+
```
259+
219260
<!-- tabs:end -->
220261

221262
<!-- end -->

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

+41
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,47 @@ var threeSumClosest = function (nums, target) {
213213
};
214214
```
215215

216+
```php
217+
class Solution {
218+
/**
219+
* @param int[] $nums
220+
* @param int $target
221+
* @return int
222+
*/
223+
224+
function threeSumClosest($nums, $target) {
225+
$n = count($nums);
226+
$closestSum = $nums[0] + $nums[1] + $nums[2];
227+
$minDiff = abs($closestSum - $target);
228+
229+
sort($nums);
230+
231+
for ($i = 0; $i < $n - 2; $i++) {
232+
$left = $i + 1;
233+
$right = $n - 1;
234+
235+
while ($left < $right) {
236+
$sum = $nums[$i] + $nums[$left] + $nums[$right];
237+
$diff = abs($sum - $target);
238+
239+
if ($diff < $minDiff) {
240+
$minDiff = $diff;
241+
$closestSum = $sum;
242+
} elseif ($sum < $target) {
243+
$left++;
244+
} elseif ($sum > $target) {
245+
$right--;
246+
} else {
247+
return $sum;
248+
}
249+
}
250+
}
251+
252+
return $closestSum;
253+
}
254+
}
255+
```
256+
216257
<!-- tabs:end -->
217258

218259
<!-- end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
class Solution {
2+
/**
3+
* @param int[] $nums
4+
* @param int $target
5+
* @return int
6+
*/
7+
8+
function threeSumClosest($nums, $target) {
9+
$n = count($nums);
10+
$closestSum = $nums[0] + $nums[1] + $nums[2];
11+
$minDiff = abs($closestSum - $target);
12+
13+
sort($nums);
14+
15+
for ($i = 0; $i < $n - 2; $i++) {
16+
17+
$left = $i + 1;
18+
$right = $n - 1;
19+
20+
while ($left < $right) {
21+
$sum = $nums[$i] + $nums[$left] + $nums[$right];
22+
$diff = abs($sum - $target);
23+
24+
if ($diff < $minDiff) {
25+
$minDiff = $diff;
26+
$closestSum = $sum;
27+
} elseif ($sum < $target) {
28+
$left++;
29+
} elseif ($sum > $target) {
30+
$right--;
31+
} else {
32+
return $sum;
33+
}
34+
}
35+
}
36+
37+
return $closestSum;
38+
}
39+
}

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

+44
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,50 @@ public class Solution {
459459
}
460460
```
461461

462+
```php
463+
class Solution {
464+
/**
465+
* @param string $digits
466+
* @return string[]
467+
*/
468+
469+
function letterCombinations($digits) {
470+
$digitMap = [
471+
'2' => ['a', 'b', 'c'],
472+
'3' => ['d', 'e', 'f'],
473+
'4' => ['g', 'h', 'i'],
474+
'5' => ['j', 'k', 'l'],
475+
'6' => ['m', 'n', 'o'],
476+
'7' => ['p', 'q', 'r', 's'],
477+
'8' => ['t', 'u', 'v'],
478+
'9' => ['w', 'x', 'y', 'z'],
479+
];
480+
481+
$combinations = [];
482+
483+
backtrack($digits, '', 0, $digitMap, $combinations);
484+
485+
return $combinations;
486+
}
487+
488+
function backtrack($digits, $current, $index, $digitMap, &$combinations) {
489+
if ($index === strlen($digits)) {
490+
if ($current !== '') {
491+
$combinations[] = $current;
492+
}
493+
return;
494+
}
495+
496+
$digit = $digits[$index];
497+
$letters = $digitMap[$digit];
498+
499+
foreach ($letters as $letter) {
500+
backtrack($digits, $current . $letter, $index + 1, $digitMap, $combinations);
501+
}
502+
}
503+
}
504+
```
505+
462506
<!-- tabs:end -->
463507

464508
<!-- end -->

0 commit comments

Comments
 (0)