• [leetcode]_Roman to Integer


    题目:给定一个罗马数字串,转换为一个整数。

    一开始没理解,以为是string to int。后来理解:罗马数字与阿拉伯数字的映射关系,见下图:

    至此,题目的意思才掌握明白,用程序模拟这张表。

    无可置否,需要将这张表的映射关系存进一个map中,对输入的string查找map中的映射关系。

    先贴上代码:(注:substring(startIndex,endIndex) 截取的子字符串是从startIndex处到endIndex-1处为止的)

    public int romanToInt(String s) {
            Map<String , Integer> roman = new HashMap<String , Integer>();
            roman.put("I" , 1);
            roman.put("IV" , 4);
            roman.put("V" , 5);
            roman.put("IX" , 9);
            roman.put("X" , 10);
            roman.put("XL" , 40);
            roman.put("L" , 50);
            roman.put("XC" , 90);
            roman.put("C" , 100);
            roman.put("CD" , 400);
            roman.put("D" , 500);
            roman.put("CM" , 900);
            roman.put("M" , 1000);
            
            int result = 0;
            int len = s.length();
            for(int i = 0 ; i < len ;){
                if( len - i >= 2) {
                    String each = s.substring(i , i + 2);
                    if(roman.get(each) != null){
                        result += roman.get(each);
                        i = i + 2;
                        continue;
                    }
                }
                String each = s.substring(i , i + 1);
                result += roman.get(each);
                i = i + 1;
            }
            return result;
    }

    网络上的map很多只存了1,5,10,100,500,1000这几个值,但是需要一个辅助变量来管理,我觉得那样写绕来绕去的,很容易哪里就绕错了。

    如果像我上面那样存1,4,5,9,10...进map。每次只需先判断两位,

    while(遍历整个string){

      if(该两位string在map中存在)

          加上这个map值;

      else(如果该两位string在map中不存在)

          加上第一位string的map值;

    }

    清晰好理解。真的很好懂。

  • 相关阅读:
    第一个java程序和注释
    hadoop map端join
    hadoop wordcount入门
    hadoop reduce端联结
    hadoop streaming的使用
    HDU5752 Sqrt Bo
    L2-008 manacher 的应用
    L3-001 凑零钱
    L2-001 紧急救援
    如何在ubuntu下安装go开发环境
  • 原文地址:https://www.cnblogs.com/glamourousGirl/p/3730760.html
Copyright © 2020-2023  润新知