「Leetcode」13. Roman to Integer(Java)
阿新 • • 發佈:2019-02-10
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)