@@ -31,31 +31,44 @@ Roman numerals are usually written largest to smallest from left to right. Howev
31
31
``` PHP
32
32
class Solution {
33
33
function romanToInt($s) {
34
- $romans = array(
35
- 'M' => 1000,
36
- 'CM' => 900,
37
- 'D' => 500,
38
- 'CD' => 400,
39
- 'C' => 100,
40
- 'XC' => 90,
41
- 'L' => 50,
42
- 'XL' => 40,
43
- 'X' => 10,
44
- 'IX' => 9,
45
- 'V' => 5,
46
- 'IV' => 4,
34
+ class Solution {
35
+
36
+ /**
37
+ * @param String $s
38
+ * @return Integer
39
+ */
40
+ function romanToInt($s) {
41
+ $romanTable = [
47
42
'I' => 1,
48
- );
49
- $roman = 'III';
50
- $result = 0;
51
-
52
- foreach ($romans as $key => $value) {
53
- while (strpos($roman, $key) === 0) {
54
- $result += $value;
55
- $roman = substr($roman, strlen($key));
43
+ 'IV' => 4,
44
+ 'V' => 5,
45
+ 'IX' => 9,
46
+ 'X' => 10,
47
+ 'XL' => 40,
48
+ 'L' => 50,
49
+ 'XC' => 90,
50
+ 'C' => 100,
51
+ 'CD' => 400,
52
+ 'D' => 500,
53
+ 'CM' => 900,
54
+ 'M' => 1000,
55
+ ];
56
+
57
+ $s = strrev($s);
58
+ $number = $romanTable[$s[0]];
59
+
60
+ $length = strlen($s);
61
+
62
+ for($i=1; $i<=$length; $i++) {
63
+ if($romanTable[$s[$i]] < $romanTable[$s[$i-1]]) {
64
+ $number -= $romanTable[$s[$i]];
65
+ }else{
66
+ $number += $romanTable[$s[$i]];
56
67
}
57
68
}
58
- return $result;
69
+
70
+ return $number;
59
71
}
72
+ }
60
73
}
61
74
```
0 commit comments