Test Failed
Push — master ( 5341f6...63084e )
by Jinyun
02:24
created

SpiralMatrixII   A

Complexity

Total Complexity 16

Size/Duplication

Total Lines 54
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 16
eloc 36
c 1
b 0
f 0
dl 0
loc 54
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
B generateMatrix2() 0 22 8
B generateMatrix() 0 28 8
1
<?php
2
3
declare(strict_types=1);
4
5
namespace leetcode;
6
7
class SpiralMatrixII
8
{
9
    public static function generateMatrix(int $n): array
10
    {
11
        if ($n <= 0) {
12
            return [];
13
        }
14
        [$ans, $cnt] = [array_fill(0, $n, array_fill(0, $n, 0)), 1];
15
        [$rowi, $rown] = [0, $n - 1];
16
        [$coli, $coln] = [0, $n - 1];
17
        while ($rowi <= $rown && $coli <= $coln) {
18
            for ($j = $coli; $j <= $coln; $j++) {
19
                $ans[$rowi][$j] = $cnt++;
20
            }
21
            $rowi++;
22
            for ($i = $rowi; $i <= $rown; $i++) {
23
                $ans[$i][$coln] = $cnt++;
24
            }
25
            $coln--;
26
            for ($j = $coln; $j >= $coli; $j--) {
27
                $ans[$rown][$j] = $cnt++;
28
            }
29
            $rown--;
30
            for ($i = $rown; $i >= $rowi; $i--) {
31
                $ans[$i][$coli] = $cnt++;
32
            }
33
            $coli++;
34
        }
35
36
        return $ans;
37
    }
38
39
    public static function generateMatrix2(int $n): array
40
    {
41
        if ($n <= 0) {
42
            return [];
43
        }
44
        $ans = array_fill(0, $n, array_fill(0, $n, 0));
45
        $dir = [[0, 1], [1, 0], [0, -1], [-1, 0]];
46
        [$cur, $pos] = [0, [0, -1]];
47
        for ($k = 0; $k < $n * $n; $k++) {
48
            $v = $k + 1;
49
            $i = $pos[0] + $dir[$cur][0];
50
            $j = $pos[1] + $dir[$cur][1];
51
            if (!(($i >= 0 && $i < $n) && ($j >= 0 && $j < $n) && $ans[$i][$j] === 0)) {
52
                $cur = ($cur + 1) % 4;
53
                $i = $pos[0] + $dir[$cur][0];
54
                $j = $pos[1] + $dir[$cur][1];
55
            }
56
            $ans[$i][$j] = $v;
57
            $pos = [$i, $j];
58
        }
59
60
        return $ans;
61
    }
62
}
63