Roman to Integer 羅馬數字轉整數
羅馬數字包含以下七種字元: I
, V
, X
, L
,C
,D
和 M
。
字元 數值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000
例如, 羅馬數字 2 寫做 II
,即為兩個並列的 1。12 寫做 XII
,即為 X
+ II
。 27 寫做 XXVII
, 即為 XX
+ V
+ II
。
通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫做 IIII
,而是 IV
。數字 1 在數字 5 的左邊,所表示的數等於大數 5 減小數 1 得到的數值 4 。同樣地,數字 9 表示為 IX
。這個特殊的規則只適用於以下六種情況:
I
可以放在V
(5) 和X
(10) 的左邊,來表示 4 和 9。X
可以放在L
(50) 和C
(100) 的左邊,來表示 40 和 90。C
可以放在D
(500) 和M
(1000) 的左邊,來表示 400 和 900。
給定一個羅馬數字,將其轉換成整數。輸入確保在 1 到 3999 的範圍內。
示例 1:
輸入: "III" 輸出: 3
示例 2:
輸入: "IV" 輸出: 4
示例 3:
輸入: "IX" 輸出: 9
示例 4:
輸入: "LVIII" 輸出: 58 解釋: L = 50, V= 5, III = 3.
示例 5:
輸入: "MCMXCIV" 輸出: 1994 解釋: M = 1000, CM = 900, XC = 90, IV = 4.
思路:羅馬數字轉為阿拉伯數字,如果按照題目中給定的規則,我們需要判斷當前訪問的字元是否滿足前面6種情況,如果不滿足,就正常加,如果滿足就加6種特殊的情況。
參考程式碼:
class Solution {
public:
int romanToInt(string s) {
map<char, int> m;
m['I'] = 1; m['V'] = 5; m['X'] = 10; m['L'] = 50;
m['C'] = 100; m['D'] = 500; m['M'] = 1000;
int res = 0;
for (int i = 0; i < s.size();i++) {
if (s[i] == 'I' && (i + 1) < s.size()) {
if (s[i + 1] == 'V') {
res += 4;
i = i + 1;
continue;
}
if (s[i + 1] == 'X') {
res += 9;
i = i + 1;
continue;
}
}
if (s[i] == 'X' && (i + 1) < s.size()) {
if (s[i + 1] == 'L') {
res += 40;
i = i + 1;
continue;
}
if (s[i + 1] == 'C') {
res += 90;
i = i + 1;
continue;
}
}
if (s[i] == 'C' && (i + 1) < s.size()) {
if (s[i + 1] == 'D') {
res += 400;
i = i + 1;
continue;
}
if (s[i + 1] == 'M') {
res += 900;
i = i + 1;
continue;
}
}
res += m[s[i]];
}
return res;
}
};
思路二:這道題其實沒有說清楚羅馬數字的規則:
V 和X 左邊的小數字只能用Ⅰ。
L 和C 左邊的小數字只能用X。
D 和M 左邊的小數字只能用C。
這意味著我們可以從字串右邊向左累加,如果左邊數字比右邊數字小,就減去左邊數字對應的數值,否則就正常的加上對應的數值。
參考程式碼:
int romanToInt(string s)
{
unordered_map<char, int> T = { { 'I' , 1 },
{ 'V' , 5 },
{ 'X' , 10 },
{ 'L' , 50 },
{ 'C' , 100 },
{ 'D' , 500 },
{ 'M' , 1000 } };
int sum = T[s.back()];
for (int i = s.length() - 2; i >= 0; --i)
{
if (T[s[i]] < T[s[i + 1]])
{
sum -= T[s[i]];
}
else
{
sum += T[s[i]];
}
}
return sum;
}
相關文章
- 羅馬數字轉整數
- LeetCode 13[羅馬數字轉整數]LeetCode
- 13. 羅馬數字轉整數
- LeetCode 力扣 羅馬數字轉整數LeetCode力扣
- leetcode13題——羅馬數字轉整數LeetCode
- python-leetcode13羅馬數字轉整數PythonLeetCode
- 羅馬數字轉化為整數的方法
- LeetCode_Python(13)_羅馬數字轉整數LeetCodePython
- 每日一道 LeetCode (4):羅馬數字轉整數LeetCode
- 每日一道演算法:羅馬數字轉整數演算法
- 【LeetCode】整數轉羅馬數字 C語言 | 此刻,已成藝術(bushi)LeetCodeC語言
- LeetCode題庫13. 羅馬數字轉整數(c++實現)LeetCodeC++
- 每天一道演算法題系列十三之羅馬數字轉整數演算法
- 使用 Haskell 將十進位制數字轉成羅馬數字Haskell
- String to Integer (atoi) 字串轉換整數 (atoi)字串
- 羅馬數字轉換成十進位制
- Leetcode 12 Integer to RomanLeetCode
- Leetcode 13 Roman to IntegerLeetCode
- 13. Roman to Integer
- Leetcode 8. String to Integer (atoi) 字串轉整數 (atoi)LeetCode字串
- Leetcode 12. Integer to RomanLeetCode
- Latex輸出大小寫羅馬數字
- 羅馬數字怎麼打出來的?電腦輸入法打出羅馬數字的方法步驟
- LeetCode Integer to Roman(012)解法總結LeetCode
- LeetCode Roman to Integer(013)解法總結LeetCode
- 2030數字羅盤:歐洲數字轉型十年計劃
- js小數轉整數JS
- LeetCode - 解題筆記 - 12 - Integer to RomanLeetCode筆記
- LeetCode 13. Roman to Integer C語言LeetCodeC語言
- 資料轉換-整數字節陣列陣列
- 翻轉整數
- 反轉整數
- 整數反轉:給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。符號
- 給定一個 32 位有符號整數,將整數中的數字進行反轉。符號
- 整數反轉(ReverseInteger)
- 醫療行業整體數字化轉型解決方案(數商雲)行業
- 7.整數反轉
- 字串轉換整數(atoi)字串