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