算法 罗马数字转整数

  1. 方案一(先计算other里字符的数据,再计算单个字符的数据)
    function romanToInt($s)
    {
     
        $array = ['I' => 1, 'V' => 5, 'X' => 10, 'L' => 50, 'C' => 100, 'D' => 500, 'M' => 1000];
        $other = ['IV' => 4, 'IX' => 9, 'XL' => 40, 'XC' => 90, 'CD' => 400, 'CM' => 900];

        $sum = 0;
        foreach ($other as $key => $value) {
     
            if (strstr($s, $key)) {
     
                $s = str_replace($key, '', $s);
                $sum += $value;
            }
        }

        $arr = str_split($s);

        foreach ($arr as $value) {
     
            if (isset($array[$value])) {
     
                print_r($value);
                $sum += $array[$value];
            }
        }

        return $sum;
    }
  1. 方案二(取一个数和下一个数比较,如果第一个数大,则相减后求和 ,“IV”)(速度更快)
    function romanToInt($s)
    {
     
        $array = ['I' => 1, 'V' => 5, 'X' => 10, 'L' => 50, 'C' => 100, 'D' => 500, 'M' => 1000];

        $sum = 0;

        for ($i = 0; $i < strlen($s); $i++) {
     
            if (isset($s[$i + 1]) && $array[$s[$i]] < $array[$s[$i + 1]]) {
     
                $sum += $array[$s[$i + 1]] - $array[$s[$i]];
                $i++;
            } else {
     
                $sum += $array[$s[$i]];
            }
        }

        return $sum;
    }

你可能感兴趣的:(算法,算法)