部分文章内容为公开资料查询整理,原文出处可能未标注,如有侵权,请联系我,谢谢。邮箱地址:gnivor@163.com ►►►需要气球么?请点击我吧!

LeetCode--13. Roman to Integer

将罗马数字转换成整型

方法:判断连续的两个字符是不是罗马数字的表示形式,如果是,那么累加结果;如果不是,就只加第一个字符对应的值

public static int romanToInt(String s) {
    int solu = 0;
    String[] numerals = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
    int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
    HashMap<String,Integer> romanint = new HashMap<String, Integer>();
    int len = values.length;
    for(int i = 0 ; i < len ; i++){
        romanint.put(numerals[i], values[i]);
    }        
    
    int strlen = s.length();
    char curr ;
    char next ;
    int i ;
    
    for(i = 0  ; i < strlen-1 ; i++){            
        curr = s.charAt(i);
        next = s.charAt(i+1);
        String str = new String()+curr+next;            
        
        Integer n = romanint.get(str);
        if(n!=null){ //如果前后两个字符组成的字符串不属于numerals(不可能是罗马数字表示形式)
            solu += n; //直接把第一个数字加在结果上
            i++;
            System.out.println(str);
        }else{
            System.out.println(curr);
            solu += romanint.get(new String()+curr); //前后两个字符组成的字符串是罗马数字表示形式,将结果累加
        }
    }
    if(i<strlen){ //判断最后一个罗马字符是否已经处理
        solu+=romanint.get(new String()+s.charAt(i));
    }
    return solu;
}

 

 

posted @ 2015-07-15 17:44  流了个火  阅读(85)  评论(0)    收藏  举报
►►►需要气球么?请点击我吧!►►►
View My Stats