天天看點

leetcode算法13.羅馬數字轉整數

哈喽!大家好,我是【學無止境小奇】,一位熱愛分享各種技術的部落客!

⭐【學無止境小奇】的創作宗旨:每一條指令都親自執行過,每一行代碼都實際運作過,每一種方法都真實實踐過,每一篇文章都良心制作過。✊✊✊

⭐【學無止境小奇】的部落格中所有涉及指令、代碼的地方,除了提供圖檔供大家參考,另外會在圖檔下方提供一份純文字格式的指令或者代碼友善大家粘貼複制直接執行指令或者運作代碼。

⭐如果你對技術有着濃厚的興趣,歡迎關注【學無止境小奇】,歡迎大家和我一起交流。

❤️❤️❤️感謝各位朋友接下來的閱讀❤️❤️❤️

文章目錄

  • ​​一、leetcode算法​​
  • ​​ 1、羅馬數字轉整數​​
  • ​​1.1、題目​​
  • ​​1.2、思路​​
  • ​​1.3、答案​​

一、leetcode算法

1、羅馬數字轉整數

1.1、題目

羅馬數字包含以下七種字元: I, V, X, L,C,D 和 M。

字元 數值

I 1

V 5

X 10

L 50

C 100

D 500

M 1000

例如, 羅馬數字 2 寫做 II ,即為兩個并列的 1 。12 寫做 XII ,即為 X + II 。 27 寫做 XXVII, 即為 XX + V + II 。

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

I 可以放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。

X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。

C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。

給定一個羅馬數字,将其轉換成整數。

1.2、思路

思路一:本題的難點就是小數字放在左邊或者右邊的問題,我們可以判斷如果放在左邊那麼減去小數字,如果放在右邊則加上小數字。

1.3、答案

class Solution {
    Map<Character,Integer> map = new HashMap<Character,Integer>(){{
        put('I', 1);
        put('V', 5);
        put('X', 10);
        put('L', 50);
        put('C', 100);
        put('D', 500);
        put('M', 1000);
    }};

    public int romanToInt(String s) {
        int num = 0;
        int n = s.length();
        for(int i =0; i < n; i++){
            int value = map.get(s.charAt(i));
            if(i < n-1 && value < map.get(s.charAt(i+1))){
                num -= value;
            } else{
                num += value;
            }
        }
        return num;
    }
}