zoukankan      html  css  js  c++  java
  • 算法笔记——将罗马数字转为整数

    题目来源:力扣(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;
        }
    }
    
  • 相关阅读:
    ORACLE数据库——触发器的创建和使用
    Oracle——游标的创建和使用
    Oracle数据库和表的操作
    JavaScript中的this,call,apply使用及区别详解
    jQuery插件开发的五种形态小结
    前端图片上传预览
    location.pathname:返回URL的域名(域名IP)后的部分。
    使用Selectivizr让IE6~8支持CSS3
    respond.js有什么作用?
    截取url参数
  • 原文地址:https://www.cnblogs.com/lz0925/p/12171034.html
Copyright © 2011-2022 走看看