1. 程式人生 > >「Leetcode」13. Roman to Integer(Java)

「Leetcode」13. Roman to Integer(Java)

char () 情況 n-1 urn 一個 default ++i 所表

分析

把具體的情況一個一個實現即可,沒有什麽幺蛾子。

代碼

class Solution {
    public int romanToInt(String s) {
        int ans = 0;
        for (int i=0; i!=s.length(); ++i)
        {
            switch(s.charAt(i))
            {
                case ‘I‘:
                    if(i<s.length()-1 && 
                      (s.charAt(i+1)==‘X‘ || s.charAt(i+1)==‘V‘))
                    {
                        ans--; 
                        break;
                    }
                    ans++;
                    break;
                case ‘V‘:
                    ans+=5;
                    break;
                case ‘X‘:
                    if(i<s.length()-1 &&
                      (s.charAt(i+1)==‘L‘ || s.charAt(i+1)==‘C‘))
                    {
                        ans-=10;
                        break;
                    }
                    ans+=10;
                    break;
                case ‘L‘:
                    ans+=50;
                    break;
                case ‘C‘:
                    if(i<s.length()-1 &&
                      (s.charAt(i+1)==‘D‘ || s.charAt(i+1)==‘M‘))
                    {
                        ans-=100;
                        break;
                    }
                    ans+=100;
                    break;
                case ‘D‘:
                    ans+=500;
                    break;
                case ‘M‘:
                    ans+=1000;
                    break;
                default: break;
            }
        }
        return ans;
    }
}

更好的代碼

精彩的代碼就是能夠把所表達的意思用更少的代碼跑更快的速度。以下代碼無疑實現了這個目標:

class Solution {
    
    public static int romanToInt(String s) {
        int num = 0;
        int n = s.length();
        
        for (int i = 0; i < n-1; i++) {
            int curr = map(s.charAt(i));
            int next = map(s.charAt(i+1));
            num = curr < next ? num - curr : num + curr;
        }
        
        num += map(s.charAt(n-1));
        
        return num;
    }
    
    private static int map(char c) {
        switch(c) {
            case ‘I‘: return 1;
            case ‘V‘: return 5;
            case ‘X‘: return 10;
            case ‘L‘: return 50;
            case ‘C‘: return 100;
            case ‘D‘: return 500;
            case ‘M‘: return 1000;
            default: return 0;
        }
    }   
}

「Leetcode」13. Roman to Integer(Java)