13.羅馬數(shù)字轉(zhuǎn)整數(shù)

羅馬數(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 ,即為兩個并列的 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。這個特殊的規(guī)則只適用于以下六種情況:

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

示例 1:

輸入: "III"
輸出: 3

示例 2:

輸入: "IV"
輸出: 4

示例 3:

輸入: "IX"
輸出: 9

示例 4:

輸入: "LVIII"
輸出: 58
解釋: C = 100, L = 50, XXX = 30, III = 3.

示例 5:

輸入: "MCMXCIV"
輸出: 1994
解釋: M = 1000, CM = 900, XC = 90, IV = 4.

簡單的匹配操作僻他,每次最多匹配兩位(最長的字符可能就是兩位)宵距。由于給定的都是合法的羅馬數(shù),所以順序不用刻意去管吨拗。也即是 假設(shè)輸入 IIIV 這樣的數(shù)字满哪,我們也當(dāng)做1+1+4=6來看待

我采用的方法非常的暴力
后來看了這篇博客《[LeetCode]13. Roman to Integer(羅馬數(shù)字轉(zhuǎn)化為整數(shù))》
羅馬數(shù)字中,除了特殊的如IV等字符外劝篷,所有字符應(yīng)該是按所代表的權(quán)值順序降低的哨鸭。也就是找到所有的異常位置(后一個字符權(quán)值 > 當(dāng)前字符權(quán)值),就可以很快的計算結(jié)果了娇妓。

具體代碼:

#include<vector>
#include<ctype.h>
#include<stdio.h>
#include<cstdio>
#include<string>
#include<iostream>

using namespace std;

int romanToInt(string s) {
    int len = 0;
    int res = 0;
    while(len < s.size()){
        //不存在匹配第二位的字符 
        if(s[len] == 'V'){
            res += 5;
        }
        else if(s[len] == 'L'){
            res += 50;
        }
        else if(s[len] == 'D'){
            res += 500;
        }
        else if(s[len] == 'M'){
            res += 1000;
        }
        else if(s[len] == 'I'){
            len++;
            if(len == s.size()){
                res += 1;
                break;
            }
            if(s[len] == 'V'){
                res += 4;
            }
            else if(s[len] == 'X'){
                res += 9;
            }
            else{
                res += 1;
                continue;
            }
        }
        else if(s[len] == 'X'){
            len++;
            if(len == s.size()){
                res += 10;
                break;
            }
            if(s[len] == 'L'){
                res += 40;
            }
            else if(s[len] == 'C'){
                res += 90;
            }
            else{
                res += 10;
                continue;
            }
        }
        else{
            len++;
            if(len == s.size()){
                res += 100;
                break;
            }
            if(s[len] == 'D'){
                res += 400;
            }
            else if(s[len] == 'M'){
                res += 900;
            }
            else{
                res += 100;
                continue;
            }
        }
        len++;
    }
    return res;
}

int main(){
    cout << romanToInt("III") << endl;
    cout << romanToInt("IV") << endl;
    cout << romanToInt("IX") << endl;
    cout << romanToInt("LVIII") << endl;
    cout << romanToInt("MCMXCIV") << endl;
    cout << romanToInt("MCDLXXVI") << endl;
    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末像鸡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子哈恰,更是在濱河造成了極大的恐慌只估,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件着绷,死亡現(xiàn)場離奇詭異蛔钙,居然都是意外死亡,警方通過查閱死者的電腦和手機荠医,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門吁脱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桑涎,“玉大人,你說我怎么就攤上這事兼贡∈矗” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵紧显,是天一觀的道長。 經(jīng)常有香客問我缕棵,道長孵班,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任招驴,我火速辦了婚禮篙程,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘别厘。我一直安慰自己虱饿,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布触趴。 她就那樣靜靜地躺著氮发,像睡著了一般。 火紅的嫁衣襯著肌膚如雪冗懦。 梳的紋絲不亂的頭發(fā)上爽冕,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音披蕉,去河邊找鬼颈畸。 笑死,一個胖子當(dāng)著我的面吹牛没讲,可吹牛的內(nèi)容都是我干的眯娱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼爬凑,長吁一口氣:“原來是場噩夢啊……” “哼徙缴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贰谣,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤娜搂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后吱抚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體百宇,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年秘豹,在試婚紗的時候發(fā)現(xiàn)自己被綠了携御。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖啄刹,靈堂內(nèi)的尸體忽然破棺而出涮坐,到底是詐尸還是另有隱情,我是刑警寧澤誓军,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布袱讹,位于F島的核電站,受9級特大地震影響昵时,放射性物質(zhì)發(fā)生泄漏捷雕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一壹甥、第九天 我趴在偏房一處隱蔽的房頂上張望救巷。 院中可真熱鬧,春花似錦句柠、人聲如沸浦译。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽精盅。三九已至,卻和暖如春谜酒,著一層夾襖步出監(jiān)牢的瞬間渤弛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工甚带, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留她肯,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓鹰贵,卻偏偏與公主長得像晴氨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子碉输,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容