iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0
佛心分享-刷題不只是刷題

只是單純想刷題XD系列 第 13

只是單純想刷題XD Day13

  • 分享至 

  • xImage
  •  

今天就來講講第13題

題目

https://ithelp.ithome.com.tw/upload/images/20240925/20160320WWYkmox8yA.jpg

題目翻譯

題目要求將整數 (num) 轉換成羅馬數字表示,並給定羅馬數字轉換表。

解題思路

  1. 建立羅馬字符對應表

    • 使用哈希表 unordered_map 來儲存羅馬字符及其對應的整數值,如 'I' -> 1, 'V' -> 5, 'X' -> 10 等。
  2. 初始化結果變數

    • 定義一個變數 count 來儲存最終結果,初始值為 0。
  3. 遍歷羅馬數字字串

    • 從頭開始遍歷字串 s,逐一處理每個字符。
  4. 檢查減法規則

    • 對於每個字符,檢查它與下一個字符的對應數值:
      • 如果當前字符的數值比下一個字符的數值小,則應用減法(如 IV = 4),因此將當前字符對應的數值從結果中減去。
      • 否則,執行加法,將當前字符對應的數值加到結果中。
  5. 返回結果

    • 當遍歷完成後,返回 count,即對應的整數值。

code

class Solution {
public:
    int romanToInt(string s) {
        unordered_map<char, int> roman{{'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}};
        int count = 0;

        for (int i = 0; i < s.size(); ++i) {
            // 如果當前數值比下個字符數值小,則要執行減法
            if (i < s.size() - 1 && roman[s[i]] < roman[s[i + 1]]) {
                count -= roman[s[i]];
            } else {
                count += roman[s[i]];
            }
        }
        return count;
    }
};

  1. 建立羅馬字符對應表

    • 使用哈希表 unordered_map 來儲存羅馬字符及其對應的整數值,如 'I' -> 1, 'V' -> 5, 'X' -> 10 等。
  2. 初始化結果變數

    • 定義一個變數 count 來儲存最終結果,初始值為 0。
  3. 遍歷羅馬數字字串

    • 從頭開始遍歷字串 s,逐一處理每個字符。
  4. 檢查減法規則

    • 對於每個字符,檢查它與下一個字符的對應數值:
      • 如果當前字符的數值比下一個字符的數值小,則應用減法(如 IV = 4),因此將當前字符對應的數值從結果中減去。
      • 否則,執行加法,將當前字符對應的數值加到結果中。
  5. 返回結果

    • 當遍歷完成後,返回 count,即對應的整數值。

上一篇
只是單純想刷題XD Day12
下一篇
只是單純想刷題XD Day14
系列文
只是單純想刷題XD30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言