分析
把具体的情况一个一个实现即可, 没有什么幺蛾子.
代码
- 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;
- }
- }
- }
来源: http://www.bubuko.com/infodetail-2948941.html