首页 > 编程语言 > 详细

算法笔记——将罗马数字转为整数

时间:2020-01-09 14:26:52      阅读:70      评论:0      收藏:0      [点我收藏+]
题目来源:力扣(LeetCode)
//I             1
//V             5
//X             10
//L             50
//C             100
//D             500
//M             1000

//I?可以放在?V?(5) 和?X?(10) 的左边,来表示 4 和 9。
//X?可以放在?L?(50) 和?C?(100) 的左边,来表示 40 和?90。?
//C?可以放在?D?(500) 和?M?(1000) 的左边,来表示?400 和?900

//输入范围 1 - 3999 

示例?1:

输入:?"III"
输出: 3
示例?2:

输入:?"IV"
输出: 4
示例?3:

输入:?"IX"
输出: 9
示例?4:

输入:?"LVIII"
输出: 58
解释: L = 50, V= 5, III = 3.
示例?5:

输入:?"MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.

解答如下:

class Solution {

    /**
     * @param String $s
     * @return Integer
     */
    function romanToInt($s) {
        // 通过字符串当做数组进行遍历
        // $rome = ["I"=>1, 'V'=>5, 'X'=>10, 'L'=>50, 'C'=>100, 'D'=>500, 'M'=>1000];
        // $len = strlen($s);
        // $sum = 0;
        // for($i=0; $i<$len; $i++){
        //     $sum += $rome[$s[$i]];
        //     if($i>=1 && ($rome[$s[$i-1]] < $rome[$s[$i]])){
        //         $sum -= $rome[$s[$i-1]]*2;
        //         if($i>=2 && ($rome[$s[$i-2]] < $rome[$s[$i-1]])){
        //             $sum -= $rome[$s[$i-2]]*2;
        //         }
        //     }
        // }
        // return $sum;

        // 通过指针来遍历数组
        $rome = ["I"=>1, 'V'=>5, 'X'=>10, 'L'=>50, 'C'=>100, 'D'=>500, 'M'=>1000];
        $arr = str_split($s);
        $sum = 0;
        do{
            $sum += $rome[current($arr)];
            if(key($arr)>=1){
                $cur = $rome[current($arr)];
                prev($arr);
                if($rome[current($arr)] < $cur){
                    $sum -= $rome[current($arr)]*2;
                    if(key($arr)>=1){
                        $cur = $rome[current($arr)];
                        prev($arr);
                        if($rome[current($arr)] < $cur){
                            $sum -= $rome[current($arr)]*2;
                        }
                        next($arr);
                    }
                }
                next($arr);
            }
        }while(next($arr));
        return $sum;
    }
}

算法笔记——将罗马数字转为整数

原文:https://www.cnblogs.com/lz0925/p/12171034.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!