[LeetCode]Roman to Integer

Roman to Integer

羅馬數字(Roman Numbers)共有7個 I, V, X, L, C, D, M。
Symbol       Value
I             1
V             5
X             10
L             50
C             100
D             500
M             1000
舉例來說羅馬數字的 II 表示 2、12 -> XII、27 -> XXVII。但往右加的數字不會超過三位,因此產生右加左減的計算方式:
  • 在較大的羅馬數字的右邊記上較小的羅馬數字,表示大數字加小數字
  • 在較大的羅馬數字的左邊記上較小的羅馬數字,表示大數字減小數字
IV -> 4
IX -> 9

XL -> 40
XC -> 90

CD -> 400 
CM -> 900
Example 1
Input: s = "III"
Output: 3
Explanation: III = 3.
Example 2

Input: s = "LVIII"
Output: 58
Explanation: L = 50, V= 5, III = 3.
Example 3
Input: s = "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

解法

class Solution
{
    /**
     * @param String $s
     * @return Integer
     */
    function romanToInt($s)
    {
        $arr_list = array(
            'I' => 1,
            'V' => 5,
            'X' => 10,
            'L' => 50,
            'C' => 100,
            'D' => 500,
            'M' => 1000,
        );

        $number = 0;
        for ($i = 0; $i < strlen($s); $i++) {
            $temp_a = $arr_list[substr($s, $i, 1)];
            $temp_b = $arr_list[substr($s, $i + 1, 1)];

            if ($temp_a < $temp_b) {
                $number -= $temp_a;
            } else {
                $number += $temp_a;
            }
        }

        return $number;
    }
}



留言