• Roman to Integer


    首先要知道罗马数字的表示法,百度百科的解释是:

      基本字符:
      I、V、X、L、C、D、M
      相应的阿拉伯数字表示为:
      1、5、10、50、100、500、1000
    1. 相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;
    2. 小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;
    3. 小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;
    4. 正常使用时,连写的数字重复不得超过三次。(表盘上的四点钟“IIII”例外)
    5. 在一个数的上面画一条横线,表示这个数扩大1000倍。

    需要一个map获取每个基本字符到数字的映射。通过观察上面可知,要获得罗马数字的表示,可从前至后遍历每一个字符,比较每一个字符和后一个字符的大小,如果前一个字符大于等于后一个字符的话,就在总数里加上这个数;如果前一个字符小于后一个字符,就在总数里加上后一个字符减掉前一个字符的结果。复杂度为O(n)。

        int getIndex(char input){
            switch(input){
                case 'I':return 1;
                case 'V':return 5;
                case 'X':return 10;
                case 'L':return 50;
                case 'C':return 100;
                case 'D':return 500;
                case 'M':return 1000;
            }
        }
    int romanToInt(string s){
        int len = s.length();
        int i;
        int tmp1, tmp2;
        int result = 0;
        for(i = 0;i < len-1; i++){
            tmp1 = getIndex(s[i]);
            tmp2 = getIndex(s[i+1]);
            if(tmp1 >= tmp2)
                result += tmp1;
            else{
                result += (tmp2 - tmp1);
                i++;
            }
        }
        if(i == len-1)
            result += getIndex(s[len-1]);
        return result;
    }
  • 相关阅读:
    java:产生小数位数为2的随机概率,使得和为1
    大数据网络分析规划
    java碎笔
    mysql修改记录
    mysql导入导出数据
    Centos中hive/hbase/hadoop/mysql实际操作及问题总结
    linux后台运行程序
    Centos搭建mysql/Hadoop/Hive/Hbase/Sqoop/Pig
    ARM-LINUX自动采集温湿度传感器数据
    java中枚举类型的使用
  • 原文地址:https://www.cnblogs.com/waruzhi/p/3332238.html
Copyright © 2020-2023  润新知