【LeetCode】ローマ数字を10進数に変換

1367 ワード

Roman to Integer
Given a roman numeral, convert it to an integer.
まずローマ数字をご紹介します
ローマ数字は,I(1),V(5),X(10),L(50),C(100),D(500),M(1000)の7つである.次の規則に従って任意の正の整数を表すことができます.
数回繰り返す:1つのローマ数字が数回繰り返されると、この数の数の数倍を表します.
右プラス左マイナス:大きなローマ数字の右に小さなローマ数字を記入し、大きな数字に小さな数字を加えることを示します.大きな数字の左側に小さなローマ数字を記入し、大きな数字が数字を減らすことを示します.ただし、左マイナスはレベルを越えてはいけません.例えば、99はICで表してはいけません.XCIXで表します.
  • 書き換え:III(3)XX(20)CC(200)
  • 左減:IX(9)XL(40)CD(400)
  • 右加:VII(7)XI(11)LX(60)
  • 総合前3つの方法:XLV(L-X+V,45)LXII(L+X+I+I,62)
  • 数字に横線を付けると1000倍大きくなります.XIX (19000)
    import java.util.HashMap;
    
    public class Solution {
    public static int romanToInt(String s) {
    	if (s == null || s.length() == 0)
    		return 0;
    	int len = s.length();
    	HashMap<Character, Integer> map = new HashMap<Character, Integer>();
    	map.put('I', 1);
    	map.put('V', 5);
    	map.put('X', 10);
    	map.put('L', 50);
    	map.put('C', 100);
    	map.put('D', 500);
    	map.put('M', 1000);
    	int result = map.get(s.charAt(len - 1));
    	int pivot = result;
    	for (int i = len - 2; i >= 0; i--) {
    		int curr = map.get(s.charAt(i));
    		if (curr >= pivot) {
    			result += curr;
    		} else {
    			result -= curr;
    		}
    		pivot = curr;
    	}
    	return result;
       }
     }

    後から後まで、currは現在指すアルファベットであり、pivotはcurrに従って比較され、後の数字がcurr以下の場合、右に加算されます.そうでなければ左に減らします.