[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 -> 900Example 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;
    }
}
留言
張貼留言