iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0
生成式 AI

Chatting with ChatGPT——一天學習一題Leetcode系列 第 4

D-4 LeetCode 13. Roman to Integer

  • 分享至 

  • xImage
  •  

美好星期四開始ㄌ~

這題是要一個字串裡,先把每個字母對應的數字存好,
從左到右讀字串:如果這個字母比右邊小,就要減去它,否則就加上它。

例子:MCMXCIV
M=1000 → 看右邊是 C=100,比它小 → 加 1000
C=100 → 看右邊是 M=1000,比它小 → 減 100
M=1000 → 看右邊是 X=10,比它大 → 加 1000
X=10 → 看右邊是 C=100,比它小 → 減 10
C=100 → 看右邊是 I=1,比它大 → 加 100
I=1 → 看右邊是 V=5,比它小 → 減 1
V=5 → 最後一個,直接加 5
結果:1000 -100 +1000 -10 +100 -1 +5 = 1994

import java.util.HashMap;  //**引入 HashMap 類別,因為我們需要「一個字母 → 一個數字」的對照表**
import java.util.Map;

class Solution {
    public int romanToInt(String s) { 
    //宣告一個方法 romanToInt
輸入:一個字串 s(羅馬數字,例如 "MCMXCIV")。
輸出:一個整數(對應的數字,例如 1994)。
        Map<Character, Integer> map = new HashMap<>(); //**建立 map,把羅馬字母和對應數字存起來**
        map.put('I', 1);
        map.put('V', 5);
        map.put('X', 10);
        map.put('L', 50);
        map.put('C', 100);
        map.put('D', 500);
        map.put('M', 1000);

        int result = 0; //**用來累加答案,初始值設為 0。**
        for (int i = 0; i < s.length(); i++) {
            int value = map.get(s.charAt(i));
            // 如果不是最後一個字母,且比右邊小 → 減
            if (i < s.length() - 1 && value < map.get(s.charAt(i + 1))) {
                result -= value;
            } else {
                result += value;
            }
        }
        return result;
    }
}
* for 迴圈:逐一讀取字串裡的每個字母。
* s.charAt(i):拿到第 i 個字母。
* map.get(...):查字典,得到該字母對應的數字。
* 例如字串是 "IX",i=0 時 → s.charAt(0) = 'I' → value = 1。

上一篇
第三天—LeetCode 9. Palindrome Number
下一篇
美好星期五-14. Longest Common Prefix
系列文
Chatting with ChatGPT——一天學習一題Leetcode9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言