ETH官方钱包

前往
大廳
主題

[LeetCode C#] 13. Roman to Integer - Dictionary

帥氣跳蚤蛋 | 2021-07-11 20:49:05 | 巴幣 0 | 人氣 473

本帥最近開始在練習LeetCode,
所以寫點文章來記錄自己的練習歷程,
遇到覺得比較值得紀錄的,會把它放上來,
供本帥之後複習使用
因為本帥不是資工背景出身的,都用自己比較容易理解的方式撰寫
所以基本上不會是最佳解,但若有更好的寫法,也歡迎交流~
===========================================================================
難度: Easy
===========================================================================
說明:
給予一羅馬數字,將羅馬數字翻譯為我們現代使用的十進位數字,
每個羅馬數字個代表了一個數字,
羅馬數字總共有7個符號,如下表所示:
符號 數字
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
羅馬數字通常是由左而右進行加法計算:
2 = II, 12 = XII, 27=XXVII
但如果左方的符號較右方小,使用的是減法計算,下列為使用減法計算的例子:
I(1)放置在V(5)與X(10)之前: IV=4, IX=9
X(10)放置在L(50)與C(100)之前: XL=40, XC=90
C(100)放置在D(500)與M(1000)之前: CD=400, CM=900
===========================================================================
測資:
Input: s = "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
===========================================================================
條件限制:
1<= s字串長度 <=15
s字元只會出現:'I', 'V', 'X', 'L', 'C', 'D', 'M'
羅馬數字的範圍只會在1~3999
===========================================================================
解題:
雖然這題的標籤是Hash Table,但是在C#上弱弱的用Dictionary來解這題,
1. 先將羅馬字母的'I', 'V', 'X', 'L', 'C', 'D', 'M'個別建立key,
2. 開始搜索s字串
3. 判斷左右邊的符號大小,若左邊較右邊符號小則要進行減法計算

    public class Solution
    {
        public int RomanToInt(string s)
        {
            int solution = 0;   //最終解答

            Dictionary<char, int> dic = new Dictionary<char, int>    //幫羅馬字母建表
            {
                {'I', 1 },
                {'V',5 },
                {'X',10 },
                {'L',50 },
                {'C',100 },
                {'D',500 },
                {'M',1000 }
            };

            int count = 0;
            while (count<s.Length)
            {
                if (count==s.Length-1   ||  dic[s[count]] >= dic[s[count + 1]]) //最後一個字母 或 左邊的數字大等於右邊
                {
                    solution += dic[s[count]];
                    count++;
                }
                else //左邊數字小於右邊
                {
                    solution += dic[s[count + 1]] - dic[s[count]];
                    count += 2; //右邊數計算過,所以跳過
                }
            }
            return solution;
        }
    }
送禮物贊助創作者 !
0
留言

創作回應

相關創作

更多創作