【LeetCodeゼロブラシから】Roman to Integer
タイトル:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
回答:
正直に言うと、この問題は中国人がローマ数字を知らないことをいじめることだ.ウィキペディアの紹介を参照してください.その中には次のような性質があります.羅馬數字共有7個,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)。 右加左減:
在較大的羅馬數字的右邊記上較小的羅馬數字,表示大數字加小數字。
在較大的羅馬數字的左邊記上較小的羅馬數字,表示大數字减小數字。
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
回答:
正直に言うと、この問題は中国人がローマ数字を知らないことをいじめることだ.ウィキペディアの紹介を参照してください.その中には次のような性質があります.
之后的事情就是查表,并且不考虑进制问题,一位一位的计数。
比较与右侧字母的大小关系,如果大于等于右侧字母则总和加上这个字母;否则减去这个字母。
class Solution {
public:
int romanToInt(string s) {
std::map<char, int>table;
table['I'] = 1;
table['V'] = 5;
table['X'] = 10;
table['L'] = 50;
table['C'] = 100;
table['D'] = 500;
table['M'] = 1000;
int len = s.size();
int ans = 0;
for(int i = 0; i<len - 1; i++)
{
if(table[s[i]] < table[s[i+1]])
ans = ans - table[s[i]];
else
ans = ans + table[s[i]];
}
ans += table[s[len - 1]];
return ans;
}
};