package string; /** * @ProjectName: leetcode * @Package: string * @ClassName: String13 * @Author: markey * @Description:13. ç½é©¬æ°åè½¬æ´æ° * ç½é©¬æ°åå å«ä»¥ä¸ä¸ç§å符: Iï¼Â Vï¼Â Xï¼Â Lï¼Cï¼D å Mã * * å符 æ°å¼ * I 1 * V 5 * X 10 * L 50 * C 100 * D 500 * M 1000 * ä¾å¦ï¼ ç½é©¬æ°å 2 åå II ï¼å³ä¸ºä¸¤ä¸ªå¹¶åç 1ã12 åå XII ï¼å³ä¸ºÂ X + II ã 27 åå  XXVII, å³ä¸ºÂ XX + V + II ã * * é常æ åµä¸ï¼ç½é©¬æ°åä¸å°çæ°åå¨å¤§çæ°åçå³è¾¹ãä½ä¹åå¨ç¹ä¾ï¼ä¾å¦ 4 ä¸åå IIIIï¼èæ¯Â IVãæ°å 1 卿°å 5 çå·¦è¾¹ï¼æè¡¨ç¤ºçæ°çäºå¤§æ° 5 åå°æ° 1 å¾å°çæ°å¼ 4 ãåæ ·å°ï¼æ°å 9 表示为 IXãè¿ä¸ªç¹æ®çè§ååªéç¨äºä»¥ä¸å ç§æ åµï¼ * * I å¯ä»¥æ¾å¨Â V (5) å X (10) çå·¦è¾¹ï¼æ¥è¡¨ç¤º 4 å 9ã * X å¯ä»¥æ¾å¨Â L (50) å C (100) çå·¦è¾¹ï¼æ¥è¡¨ç¤º 40 å 90ã * C å¯ä»¥æ¾å¨Â D (500) å M (1000) çå·¦è¾¹ï¼æ¥è¡¨ç¤ºÂ 400 å 900ã * ç»å®ä¸ä¸ªç½é©¬æ°åï¼å°å ¶è½¬æ¢ææ´æ°ãè¾å ¥ç¡®ä¿å¨ 1Â å° 3999 çèå´å ã * * 示ä¾Â 1: * * è¾å ¥: "III" * è¾åº: 3 * 示ä¾Â 2: * * è¾å ¥: "IV" * è¾åº: 4 * 示ä¾Â 3: * * è¾å ¥: "IX" * è¾åº: 9 * 示ä¾Â 4: * * è¾å ¥: "LVIII" * è¾åº: 58 * è§£é: L = 50, V= 5, III = 3. * 示ä¾Â 5: * * è¾å ¥: "MCMXCIV" * è¾åº: 1994 * è§£é: M = 1000, CM = 900, XC = 90, IV = 4. * * æ¥æºï¼åæ£ï¼LeetCodeï¼ * 龿¥ï¼https://leetcode-cn.com/problems/roman-to-integer * è使å½é¢æ£ç½ç»ææãåä¸è½¬è½½è¯·èç³»å®æ¹ææï¼éåä¸è½¬è½½è¯·æ³¨æåºå¤ã * @Date: 2020/5/1 23:50 * @Version: 1.0 */ public class String13 { public int romanToInt(String s) { int res = 0; char preChar = ' '; for (int i = s.length() - 1; i >= 0; i--) { switch (s.charAt(i)) { case 'I': res += (preChar == 'V' || preChar == 'X') ? -1 : 1; preChar = 'I'; break; case 'V': res += 5; preChar = 'V'; break; case 'X': res += (preChar == 'L' || preChar == 'C') ? -10 : 10; preChar = 'X'; break; case 'L': res += 50; preChar = 'L'; break; case 'C': res += (preChar == 'D' || preChar == 'M') ? -100: 100; preChar = 'C'; break; case 'D': res += 500; preChar = 'D'; break; case 'M': res += 1000; preChar = 'M'; break; default: } } return res; } }