Test Failed
Push — master ( 53f60f...395406 )
by Jinyun
02:38 queued 11s
created

RomanToInteger   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 37
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 8
eloc 22
c 1
b 0
f 0
dl 0
loc 37
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A romanToInt() 0 16 4
A romanToInt2() 0 17 4
1
<?php
2
3
declare(strict_types=1);
4
5
namespace leetcode;
6
7
class RomanToInteger
8
{
9
    public static function romanToInt(string $s): int
10
    {
11
        [$res, $len] = [0, strlen($s)];
12
        if ($len === 0) {
13
            return $res;
14
        }
15
        $map = ['I' => 1, 'V' => 5, 'X' => 10, 'L' => 50, 'C' => 100, 'D' => 500, 'M' => 1000];
16
        for ($i = 0, $j = 1; $j < $len; $i++, $j++) {
17
            if ($map[$s[$i]] >= $map[$s[$j]]) {
18
                $res += $map[$s[$i]];
19
            } else {
20
                $res -= $map[$s[$i]];
21
            }
22
        }
23
24
        return $res + $map[$s[$i]];
25
    }
26
27
    public static function romanToInt2(string $s): int
28
    {
29
        if (empty($s)) {
30
            return 0;
31
        }
32
        $n = strlen($s);
33
        $map = ['I' => 1, 'V' => 5, 'X' => 10, 'L' => 50, 'C' => 100, 'D' => 500, 'M' => 1000];
34
        $num = $map[$s[$n - 1]];
35
        for ($i = $n - 2; $i >= 0; $i--) {
36
            if ($map[$s[$i]] < $map[$s[$i + 1]]) {
37
                $num -= $map[$s[$i]];
38
            } else {
39
                $num += $map[$s[$i]];
40
            }
41
        }
42
43
        return $num;
44
    }
45
}
46