13 罗马数字转整数

一开始使用Hashtable 来做这个题,提示编译出错,估计其编译的jdk版本在1.8以下:

class Solution {
     public static int romanToInt(String s) {
		 //基本思路:从右向左扫描,每次扫描两位,按对应量转换数值
		 Map<String, Integer> rules1 = new HashMap<String, Integer>();
		 rules1.put("I", 1);
		 rules1.put("V", 5);
		 rules1.put("X", 10);
		 rules1.put("L", 50);
		 rules1.put("C", 100);
		 rules1.put("D", 500);
		 rules1.put("M", 1000);
		 //未考虑s为非罗马数字的情况
		 if(s.length()==1)return rules1.get(s);
		 Map<String, Integer> rules2 = new HashMap<String, Integer>();
		 rules2.put("IV", 4);
		 rules2.put("IX", 9);
		 rules2.put("XL", 40);
		 rules2.put("XC", 90);
		 rules2.put("CD", 400);
		 rules2.put("CM", 900);
		 char[] info = s.toCharArray();
		 int point1 = info.length - 1;
		 int point2 = info.length - 2;
		 int tol_val = 0;
		 StringBuilder strbu = new StringBuilder();
		 while(point2 >= 0) {
			 strbu.append(info[point2]);
			 strbu.append(info[point1]);
			 if(rules2.containsKey(strbu.toString())) {
				 tol_val+=rules2.get(strbu.toString());
				 point1-=2;
				 point2-=2;
				 if(point1<0) return tol_val;
			 }
			 else {
				 tol_val+=rules1.get(String.valueOf(info[point1]));
				 point1--;
				 point2--;
			 }
			 strbu.delete(0, strbu.length());
		 }
		 //strbu.append(info[point1]);
		 tol_val+=rules1.get(String.valueOf(info[point1]));
		/*
		 * if(rules2.containsKey(strbu.toString())) {
		 * tol_val+=rules2.get(strbu.toString()); } else {
		 * tol_val+=rules1.get(String.valueOf(info[point1]));
		 */		 
		 return tol_val ;			 
	 }
}

猜你喜欢

转载自blog.csdn.net/zcy_wxy/article/details/86382876