Leetcode-13. 罗马数字转整数(C++)
題目鏈接
https://leetcode-cn.com/problems/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.
解題思路
值是簡單判斷下字符的下一位,如果和下一位能夠組成一個數,那就組,不能的話,就直接計算本身的值。
解題代碼
#include <iostream> #include <string> using namespace std; class Solution { public:int getTwoNum(char num1, char num2) { // I可以放在V(5) 和 X (10) 的左邊,來表示 4 和 9。 // X可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。 // C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。if (num1=='I' && (num2 =='V' || num2=='X')){if (num2 =='V'){return 4;} else{return 9;}}if (num1=='X' && (num2 =='L' || num2=='C')){if (num2 =='L'){return 40;} else{return 90;}}if (num1=='C' && (num2 =='D' || num2=='M')){if (num2 =='D'){return 400;} else{return 900;}}else{return -1;}}int romanToInt(string s) {int index = 0;int sum = 0;while (index < s.length()) {char romeNum1 = s[index];if (index == s.length()) {sum += getNum(romeNum1);} else {char romeNum2 = s[index + 1];int twosum = getTwoNum(romeNum1, romeNum2);if (twosum > 0) {sum += twosum;index++;} else {sum += getNum(romeNum1);}}index++;}return sum;}private:int getNum(char roma) {switch (roma) {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;}} };//int main() { // Solution solution; // int k = solution.romanToInt("L"); // cout<<k; // return 0; //}?
總結
以上是生活随笔為你收集整理的Leetcode-13. 罗马数字转整数(C++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天翼云从业认证(1.6)虚拟化技术基础、
- 下一篇: 天翼云从业认证(1.8)了解软件开发的环