美好星期四開始ㄌ~
這題是要一個字串裡,先把每個字母對應的數字存好,
從左到右讀字串:如果這個字母比右邊小,就要減去它,否則就加上它。
例子: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。