能力有限,这道题采用的就是暴力方法,也只超过了39%的用户。需要注意的就是罗马数字如果IXC的后一位比前一位大的采取的是减的方式。
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
给定一个罗马数字,将其转换为整数。
输入保证在1到3999之间。
1 class Solution { 2 public int romanToInt(String s) { 3 int length=s.length(); 4 int num=0; 5 for(int i=0;i<length;i++){ 6 switch (s.charAt(i)) { 7 case 'I':{ 8 if((i+1!=length)&&s.charAt(i+1)!='I'){ 9 num-=1; 10 break; 11 } 12 else { 13 num+=1; 14 break; 15 } 16 } 17 case 'X': 18 if((i+1!=length)&&((s.charAt(i+1)=='M')||(s.charAt(i+1)=='D')||(s.charAt(i+1)=='C')||(s.charAt(i+1)=='L'))){ 19 num-=10; 20 break; 21 } 22 else { 23 num+=10; 24 break; 25 } 26 case 'C': 27 if((i+1!=length)&&((s.charAt(i+1)=='M')||(s.charAt(i+1)=='D'))){ 28 num-=100; 29 break; 30 } 31 else { 32 num+=100; 33 break; 34 } 35 case 'M': 36 num+=1000; 37 break; 38 case 'V': 39 num+=5; 40 break; 41 case 'L': 42 num+=50; 43 break; 44 case 'D': 45 num+=500; 46 break; 47 default: 48 break; 49 } 50 } 51 return num; 52 } 53 }