LeetCode 13. Roman to Integer C語言

wgx23724發表於2018-03-11

給定一個羅馬數字,將其轉換為整數。

輸入保證在1到3999的範圍內。

題目的意思給羅馬數字,轉成對應的數字,範圍從1-3999;補充知識,下圖是對應轉換規則;



不過多的說廢話:根據上圖我們直接說一下解題思路:1。怎麼解析羅馬數字,需要我們自己做一些對映這裡我寫一個方法來做這項工作:int charToInt(char ch); 2。怎麼把解析出來的羅馬數字計算出來結果;我們需要觀察出普遍的規律,才能用程式來實現;

如:“IV”,“VI”,“IX”,“MCMXCVI”,通過觀察我們不難發現,當前字元轉成的數字小於下一個字元所轉成的數字,也就是說左邊的小於右邊的,如“IV”,這時候我們就後面的減去前面的; 這裡注意,當你做完減法時候,也就是我們已經也把後面的字元計算完成了,所以你的指標就要索引++;反之,加上當前轉出來的結果;具體實現,直接看程式碼吧!

直接貼出程式碼

int charToInt(char ch){
    switch(ch){
        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 romanToInt(char* s) {
    if(s == NULL)
        return 0;
    int index = 0; // 索引
    int result = 0;// 最後輸出結果
    while(s[index] !='\0'){
        if(charToInt(s[index]) < charToInt(s[index+1])){
            result += charToInt(s[index+1]) - charToInt(s[index]);
            index++;            
        }else{
            result += charToInt(s[index]) ;
        }
        index++;
    }
    return result;
}



相關文章