iT邦幫忙

1

老肝哥-菜鳥Java的LeetCode歷程,第十三題:Roman to Integer,朝遠大目標前進!

嘿嘿!各位好你最好的朋友老肝哥照慣例又來了

今天老肝哥心情其實不錯
因為自己又堅持一天了,但老肝哥在想
Easy的題目就有四百多題,一天一題484要搞一年?
所以勤奮如老肝哥,當然也要加快腳步跟上各路大神囉

其實以老肝哥的聰明才智,1秒就想好怎麼寫了,
但寫到後面才想起,例如羅馬數字表示4:IV
並不是單純相加,才趕快上網問Google小姐姊的

13. Roman to Integer

題目描述為下:
Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.

Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000

老肝哥的理解為:就是把羅馬數字轉換成一般的數字就這樣

解答如下:

class Solution {
    public int romanToInt(String s) {
        
        char[] c = s.toCharArray();
        int sum = 0;
        
        if (s.indexOf("IV") != -1) sum -= 2;
        if (s.indexOf("IX") != -1) sum -= 2;
        if (s.indexOf("XL") != -1) sum -= 20;
        if (s.indexOf("XC") != -1) sum -= 20;
        if (s.indexOf("CD") != -1) sum -= 200;
        if (s.indexOf("CM") != -1) sum -= 200;
        
        for(int i = 0;i<=c.length-1;i++) {
        	if (c[i] == 'I') sum += 1;
            if (c[i] == 'V') sum += 5;
            if (c[i] == 'X') sum += 10;
            if (c[i] == 'L') sum += 50;
            if (c[i] == 'C') sum += 100;
            if (c[i] == 'D') sum += 500;
            if (c[i] == 'M') sum += 1000;
        }
        return sum;
        
    }
}

解釋如下:

其實這題最重要的應該是找出IV,IX,XL這些條件的規律,
使用s.indexOf("IV") != -1 找出傳入字串是否包含需要特殊計算的數字,
如果有呢 則減去相同位數的2 例如: VI vs IV
如果單純用加法算 V:5 I:1 那就是5+1=6,但還有擺放順序的位置
若為IV則是 5-1=4 但各位小夥伴有沒有發現呢,
如果照這個邏輯下去處理 無論我擺放位置是在前或在後,
只需要判斷 如果出現IV這種例子時,-2就會獲得答案

剩下的大家都會拉,加一加減一減而已,只要想通上面的邏輯,這題相信大家都是秒解的!


尚未有邦友留言

立即登入留言