-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPrimeInDiagonal.php
More file actions
66 lines (63 loc) · 1.98 KB
/
Copy pathPrimeInDiagonal.php
File metadata and controls
66 lines (63 loc) · 1.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
namespace App;
/**
* Prime In Diagonal
*
* You are given a 0-indexed two-dimensional integer array nums. Return the largest prime number that lies on at least
* one of the diagonals of nums. In case, no prime is present on any of the diagonals, return 0.
* Note that:
* - An integer is prime if it is greater than 1 and has no positive integer divisors other than 1 and itself.
* - An integer val is on one of the diagonals of nums if there exists an integer i for which nums[i][i] = val or
* an i for which nums[i][nums.length-i-1] = val.
*
* Example 1:
* Input: nums = [[1,2,3],[5,6,7],[9,10,11]]
* Output: 11
* Explanation: The numbers 1, 3, 6, 9, and 11 are the only numbers present on at least one of the diagonals. Since 11
* is the largest prime, we return 11.
*
* Example 2:
* Input: nums = [[1,2,3],[5,17,7],[9,11,10]]
* Output: 17
* Explanation: The numbers 1, 3, 9, 10, and 17 are all present on at least one of the diagonals. 17 is the largest
* prime, so we return 17.
*
* https://leetcode.com/problems/prime-in-diagonal
*/
class PrimeInDiagonal
{
/**
* @param int[][] $nums
* @return int
*/
public function diagonalPrime(array $nums): int
{
$maxPrime = 0;
for ($row = 0, $rowMax = count($nums); $row < $rowMax; $row++) {
for ($col = 0, $colMax = count($nums[$row]); $col < $colMax; $col++) {
if ($row === $col || $row + $col === $rowMax - 1) {
if ($this->isPrime($nums[$row][$col])) {
$maxPrime = max($maxPrime, $nums[$row][$col]);
}
}
}
}
return $maxPrime;
}
/**
* @param int $num
* @return bool
*/
private function isPrime(int $num): bool
{
if ($num < 2) {
return false;
}
for ($i = 2; $i <= sqrt($num); $i++) {
if ($num % $i === 0) {
return false;
}
}
return true;
}
}