日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

Leetcode-13. 罗马数字转整数(C++)

發(fā)布時(shí)間:2025/3/19 c/c++ 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode-13. 罗马数字转整数(C++) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目鏈接

https://leetcode-cn.com/problems/roman-to-integer

題目描述

羅馬數(shù)字包含以下七種字符:?I,?V,?X,?L,C,D?和?M。

字符 ? ? ? ? ?數(shù)值
I ? ? ? ? ? ? 1
V ? ? ? ? ? ? 5
X ? ? ? ? ? ? 10
L ? ? ? ? ? ? 50
C ? ? ? ? ? ? 100
D ? ? ? ? ? ? 500
M ? ? ? ? ? ? 1000
例如, 羅馬數(shù)字 2 寫做?II?,即為兩個(gè)并列的 1。12 寫做?XII?,即為?X?+?II?。 27 寫做??XXVII, 即為?XX?+?V?+?II?。

通常情況下,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊。但也存在特例,例如 4 不寫做?IIII,而是?IV。數(shù)字 1 在數(shù)字 5 的左邊,所表示的數(shù)等于大數(shù) 5 減小數(shù) 1 得到的數(shù)值 4 。同樣地,數(shù)字 9 表示為?IX。這個(gè)特殊的規(guī)則只適用于以下六種情況:

I?可以放在?V?(5) 和?X?(10) 的左邊,來表示 4 和 9。
X?可以放在?L?(50) 和?C?(100) 的左邊,來表示 40 和?90。?
C?可以放在?D?(500) 和?M?(1000) 的左邊,來表示?400 和?900。
給定一個(gè)羅馬數(shù)字,將其轉(zhuǎn)換成整數(shù)。輸入確保在 1?到 3999 的范圍內(nèi)。

輸入輸出

示例?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.

解題思路

值是簡單判斷下字符的下一位,如果和下一位能夠組成一個(gè)數(shù),那就組,不能的話,就直接計(jì)算本身的值。

解題代碼

#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; //}

?

總結(jié)

以上是生活随笔為你收集整理的Leetcode-13. 罗马数字转整数(C++)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。