Leetcode简单题罗马数字转整数

题目来源:https://leetcode.com/problems/roman-to-integer/description/

题目简单描述:要求输入[1,3999]范围的罗马数字,能转换成整数输出。

题目分析:

罗马数字
罗马数字 I V X L C D M
整数 1 5 10 50 100 500 1000

规则:

  1. 相同的数字连写表示这些数字相加,如III表示3    
  2. 小的数字在大的数字左边,表示大的数字减去小的数字如IV表示数字4
  3. 小的数字在大的数字右边,表示全部相加,如VII表示为7
  4. 在一个数字上面画一条横线表示这个数字本身的值乘以1000,(此题中这种情况不予考虑)   

解题思路:

从左往右按字符扫描,若当前字符数值大于或者等于他后面的字符数值,则sum=sum+此字符的值,否则,sum = sum-此字符的值
对于最后一个字符,都是加在sum上的。
代码:
class Solution {
	 public int romanToInt(String s) {
	        char[] roman = s.toCharArray();
	        int sum = 0;
	        int s1 =0,s2=0;
			Map m  = new HashMap(){{
	        	put('I', 1);
	        	put('V', 5);
	        	put('X', 10);
	        	put('L', 50);
	        	put('C', 100);
	        	put('D', 500);
	        	put('M', 1000);
	        }};
	        for (int i = 0; i < roman.length-1; i++) {
	        	s1 = (int)m.get(roman[i]);
	        	s2 = (int)m.get(roman[i+1]);
				if (s1>=s2) {
					sum = sum +s1;
				}
				else {
					sum = sum-s1;
				}
			}
	        sum += (int)m.get(roman[roman.length-1]);
	        return sum;
	    }
}


你可能感兴趣的:(Leetcode简单题罗马数字转整数)