leetcode [13] Roman to Integer 將羅馬數(shù)字轉(zhuǎn)換成整數(shù)

羅馬數(shù)字的表示方式

I = 1
V = 5
X = 10
L = 50
C = 100
D = 500
M = 1000

羅馬數(shù)字的計(jì)數(shù)方式:

  • 相同的數(shù)字連寫(xiě),表示將這些數(shù)字相加
  • 小的數(shù)字寫(xiě)在大的數(shù)字右邊,表示這這個(gè)數(shù)字相加
  • 大的數(shù)字寫(xiě)在小的數(shù)字右邊,表示用大的數(shù)字減去小的數(shù)字。

代碼思路:

  • 先將I,V,X,L,C,D,M 轉(zhuǎn)換成其表示的數(shù)字

  • 然后將字符數(shù)組的中的值進(jìn)行比較

  • pre >= now ,就將這兩個(gè)數(shù)相加

  • pre<now ,將這兩個(gè)數(shù)相減

此時(shí)需要注意,這個(gè)小的數(shù)在上一輪中,已經(jīng)被加過(guò),這一輪假如只減一次,一加一減相當(dāng)于值沒(méi)有變;所以這次要將小的數(shù)減兩次

public class Solution {
    public int romanToInt(String s) {
        char[] num = s.toCharArray();
        int pre = charToInt(num[0]);
        int result = pre;
        int now = 0;
        for(int j = 1;j<s.length();j++)
        {
            now = charToInt(num[j]);
            if(pre >= now)
            {
                result += now; 
            }
            else
            {
                result = result +now - 2 * pre;
            }
            pre = now;
        }
        return result;
    }
    public int charToInt(char c)
    {
        int value = 0;
        switch(c)
        {
            case 'I':
                value = 1;
                break;
            case 'V':
                value = 5;
                break;
            case 'X':
                value = 10;
                break;
            case 'L':
                value = 50;
                break;
            case 'C':
                value = 100;
                break;
            case 'D':
                value = 500;
                break;
            case 'M':
                value = 1000;
                break;
        }
        return value;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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