Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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‎

Lines changed: 50 additions & 0 deletions
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‎

Lines changed: 50 additions & 0 deletions
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 -->
Lines changed: 48 additions & 0 deletions
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‎

Lines changed: 41 additions & 0 deletions
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‎

Lines changed: 41 additions & 0 deletions
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 -->
Lines changed: 39 additions & 0 deletions
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‎

Lines changed: 44 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /