Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
将罗马数字转为阿拉伯数字 对应转换表如下:
个位数举例 I, 1 】II, 2】 III, 3】 IV, 4 】V, 5 】VI, 6】 VII, 7】 VIII,8 】IX, 9 ·十位数举例 X, 10】 XI, 11 】XII, 12】 XIII, 13】 XIV, 14】 XV, 15 】XVI, 16 】XVII, 17 】XVIII, 18】 XIX, 19】 XX, 20】 XXI, 21 】XXII, 22 】XXIX, 29】 XXX, 30】 XXXIV, 34】 XXXV, 35 】XXXIX, 39】 XL, 40】 L, 50 】LI, 51】 LV, 55】 LX, 60】 LXV, 65】 LXXX, 80】 XC, 90 】XCIII, 93】 XCV, 95 】XCVIII, 98】 XCIX, 99 】 ·百位数举例 C, 100】 CC, 200 】CCC, 300 】CD, 400】 D, 500 】DC,600 】DCC, 700】 DCCC, 800 】CM, 900】 CMXCIX,999】 ·千位数举例 M, 1000】 MC, 1100 】MCD, 1400 】MD, 1500 】MDC, 1600 】MDCLXVI, 1666】 MDCCCLXXXVIII, 1888 】MDCCCXCIX, 1899 】MCM, 1900 】MCMLXXVI, 1976】 MCMLXXXIV, 1984】 MCMXC, 1990 】MM, 2000 】MMMCMXCIX, 3999】
可以看出 基本的数字有 I V X L C D M 分别对应 1 5 10 50 100 500 1000 当前面的字母小于后面字母时 如 IV 表示 V-I当前面数字大于后面数字时 如VI 表示V+I 根据此可以遍历S求出值 代码如下:
public class Solution { public int romanToInt(String s) { int res=0; int prev=getRomanValue(s.charAt(0)); res+=prev; for(int i=1;i<s.length();i++){ int curv=getRomanValue(s.charAt(i)); if(curv<=prev){ res+=curv;; }else{ res+=curv-2*prev; } prev=curv; } return res; } public int getRomanValue(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; } } }
时间: 2024-10-31 06:47:18