[LeetCode]Roman to Integer
1802 ワード
タイトルの説明
Given a roman numeral, convert it to an integer.Input is guaranteed to be within the range from 1 to 3999.
ローマ数字を整数に変換します.入力保証は1~3999の範囲です.
問題を解く構想.
ローマ数字の基本文字:
I、V、X、L、C、D、M
対応するアラビア数字は次のように表されます.
1.5、10、50、100、500、1000
(1)同一の数字を連続して書き、表す数はこれらの数字を加算した数に等しい.例えば、III=3;
(2)小さい数字は大きい数字の右側にあり、表す数はこれらの数字を加算した数に等しい.例えば、VIII=8;Ⅻ = 12;
(3)小さい数字、(I,X,Cに限る)大きい数字の左側で、表す数は大きい数から小数を減らして得た数に等しい.例えば、IV=4;Ⅸ=9;
(4)通常の使用時に連続して書かれた数字を3回以上繰り返してはならない.(文字盤の4時--「III」、例外.)
(5)1つの数の上に横線を引いて、この数が1000倍になることを示します.
ローマ数字は純粋に重畳されていることがわかり,ユーザが1つの数を入力すると,この数を遍歴しsumで合計し,iとi+1を比較すると法則が得られる.
コード#コード#
Given a roman numeral, convert it to an integer.Input is guaranteed to be within the range from 1 to 3999.
ローマ数字を整数に変換します.入力保証は1~3999の範囲です.
問題を解く構想.
ローマ数字の基本文字:
I、V、X、L、C、D、M
対応するアラビア数字は次のように表されます.
1.5、10、50、100、500、1000
(1)同一の数字を連続して書き、表す数はこれらの数字を加算した数に等しい.例えば、III=3;
(2)小さい数字は大きい数字の右側にあり、表す数はこれらの数字を加算した数に等しい.例えば、VIII=8;Ⅻ = 12;
(3)小さい数字、(I,X,Cに限る)大きい数字の左側で、表す数は大きい数から小数を減らして得た数に等しい.例えば、IV=4;Ⅸ=9;
(4)通常の使用時に連続して書かれた数字を3回以上繰り返してはならない.(文字盤の4時--「III」、例外.)
(5)1つの数の上に横線を引いて、この数が1000倍になることを示します.
ローマ数字は純粋に重畳されていることがわかり,ユーザが1つの数を入力すると,この数を遍歴しsumで合計し,iとi+1を比較すると法則が得られる.
コード#コード#
public class Solution {
public int romanToInt(String s) {
if(s.length() < 1) return 0;
int sum = 0;
int sub = getRomanValue(s.charAt(0));
int lastInt = sub;
for(int i = 1;i < s.length();i++){
char curC = s.charAt(i);
int curInt = getRomanValue(curC);
if(curInt < lastInt){
sum += sub;
sub = curInt;
} else if(curInt > lastInt){
sub = curInt - sub;
} else if(curInt == lastInt){
sub += curInt;
}
lastInt = curInt;
}
sum += sub;
return sum;
}
public int getRomanValue(char c) {
switch(c) {
case 'I': return 1;
case 'V': return 5;
case 'X': return 10;
case 'L': return 50;
case 'C': return 100;
case 'D': return 500;
case 'M': return 1000;
default: return 0;
}
}
}