LeetCode_13---Roman to Integer

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

翻译:罗马数字转换为整数

    Code:

    import java.util.HashMap;
    import java.util.Map;
    
    
    /**
     * @author MohnSnow
     * @time 2015年6月3日 下午3:16:46
     * 
     */
    public class LeetCode13 {
    
    
    <span style="white-space:pre">	</span>/**
    <span style="white-space:pre">	</span> * @param argsmengdx
    <span style="white-space:pre">	</span> *            -fnst
    <span style="white-space:pre">	</span> */
    <span style="white-space:pre">	</span>/*
    <span style="white-space:pre">	</span> * test:
    <span style="white-space:pre">	</span> * 个位数举例
    <span style="white-space:pre">	</span> * Ⅰ,1 】Ⅱ,2】 Ⅲ,3】 Ⅳ,4 】Ⅴ,5 】Ⅵ,6】Ⅶ,7】 Ⅷ,8 】Ⅸ,9 】
    <span style="white-space:pre">	</span> * 十位数举例
    <span style="white-space:pre">	</span> * Ⅹ,10】 Ⅺ,11 】Ⅻ,12】 XIII,13】 XIV,14】 XV,15 】XVI,16 】XVII,17 】XVIII,18】
    <span style="white-space:pre">	</span> * XIX,19】 XX,20】 XXI,21 】XXII,22 】XXIX,29】 XXX,30】 XXXIV,34】 XXXV,35 】
    <span style="white-space:pre">	</span> * XXXIX,39】 XL,40】 L,50 】LI,51】 LV,55】 LX,60】 LXV,65】 LXXX,80】 XC,90 】
    <span style="white-space:pre">	</span> * XCIII,93】 XCV,95 】XCVIII,98】 XCIX,99 】
    <span style="white-space:pre">	</span> * 百位数举例
    <span style="white-space:pre">	</span> * C,100】 CC,200 】CCC,300 】CD,400】 D,500 】DC,600 】DCC,700】 DCCC,800 】CM,900】
    <span style="white-space:pre">	</span> * CMXCIX,999】
    <span style="white-space:pre">	</span> * 千位数举例
    <span style="white-space:pre">	</span> * M,1000】 MC,1100 】MCD,1400 】MD,1500 】MDC,1600 】MDCLXVI,1666】 MDCCCLXXXVIII,1888 】
    <span style="white-space:pre">	</span> * MDCCCXCIX,1899 】MCM,1900 】MCMLXXVI,1976】 MCMLXXXIV,1984】
    <span style="white-space:pre">	</span> * MCMXC,1990 】MM,2000 】MMMCMXCIX,3999】
    <span style="white-space:pre">	</span> * 千位数以上举例
    <span style="white-space:pre">	</span> * ,65,259 】,134945584】, 183650】
    <span style="white-space:pre">	</span> */
    <span style="white-space:pre">	</span>//444msA
    <span style="white-space:pre">	</span>public static int romanToInt(String s) {
    <span style="white-space:pre">		</span>s = s + " ";//防止(i+1)溢出
    <span style="white-space:pre">		</span>int len = s.length();
    <span style="white-space:pre">		</span>int re = 0;
    <span style="white-space:pre">		</span>for (int i = 0; i < len; i++) {
    <span style="white-space:pre">			</span>switch (s.charAt(i)) {
    <span style="white-space:pre">				</span>case 'M':
    <span style="white-space:pre">					</span>re = re + 1000;
    <span style="white-space:pre">					</span>break;
    <span style="white-space:pre">				</span>case 'D':
    <span style="white-space:pre">					</span>re = re + 500;
    <span style="white-space:pre">					</span>break;
    <span style="white-space:pre">				</span>case 'C':
    <span style="white-space:pre">					</span>if (s.charAt(i + 1) == 'M') {
    <span style="white-space:pre">						</span>re = re + 900;
    <span style="white-space:pre">						</span>i++;
    <span style="white-space:pre">					</span>} else if (s.charAt(i + 1) == 'D') {
    <span style="white-space:pre">						</span>re = re + 400;
    <span style="white-space:pre">						</span>i++;
    <span style="white-space:pre">					</span>} else {
    <span style="white-space:pre">						</span>re = re + 100;
    <span style="white-space:pre">					</span>}
    <span style="white-space:pre">					</span>break;
    <span style="white-space:pre">				</span>case 'L':
    <span style="white-space:pre">					</span>re = re + 50;
    <span style="white-space:pre">					</span>break;
    <span style="white-space:pre">				</span>case 'V':
    <span style="white-space:pre">					</span>re = re + 5;
    <span style="white-space:pre">					</span>break;
    <span style="white-space:pre">				</span>case 'X':
    <span style="white-space:pre">					</span>if (s.charAt(i + 1) == 'C') {
    <span style="white-space:pre">						</span>re = re + 90;
    <span style="white-space:pre">						</span>i++;
    <span style="white-space:pre">					</span>} else if (s.charAt(i + 1) == 'L') {
    <span style="white-space:pre">						</span>re = re + 40;
    <span style="white-space:pre">						</span>i++;
    <span style="white-space:pre">					</span>} else {
    <span style="white-space:pre">						</span>re = re + 10;
    <span style="white-space:pre">					</span>}
    <span style="white-space:pre">					</span>break;
    
    
    <span style="white-space:pre">				</span>case 'I':
    <span style="white-space:pre">					</span>if (s.charAt(i + 1) == 'X') {
    <span style="white-space:pre">						</span>re = re + 9;
    <span style="white-space:pre">						</span>i++;
    <span style="white-space:pre">					</span>} else if (s.charAt(i + 1) == 'V') {
    <span style="white-space:pre">						</span>re = re + 4;
    <span style="white-space:pre">						</span>i++;
    <span style="white-space:pre">					</span>} else {
    <span style="white-space:pre">						</span>re = re + 1;
    <span style="white-space:pre">					</span>}
    <span style="white-space:pre">					</span>break;
    <span style="white-space:pre">				</span>default:
    <span style="white-space:pre">					</span>break;
    <span style="white-space:pre">			</span>}
    <span style="white-space:pre">		</span>}
    <span style="white-space:pre">		</span>return re;
    <span style="white-space:pre">	</span>}
    
    
    <span style="white-space:pre">	</span>//528msA  但是此版本的C++代码只用64ms
    <span style="white-space:pre">	</span>public static int romanToInt1(String s) {
    <span style="white-space:pre">		</span>int result = 0;
    <span style="white-space:pre">		</span>Map<Character, Integer> hashMap = new HashMap<Character, Integer>(7);
    <span style="white-space:pre">		</span>hashMap.put('I', 1);
    <span style="white-space:pre">		</span>hashMap.put('V', 5);
    <span style="white-space:pre">		</span>hashMap.put('X', 10);
    <span style="white-space:pre">		</span>hashMap.put('L', 50);
    <span style="white-space:pre">		</span>hashMap.put('C', 100);
    <span style="white-space:pre">		</span>hashMap.put('D', 500);
    <span style="white-space:pre">		</span>hashMap.put('M', 1000);
    <span style="white-space:pre">		</span>for (int i = s.length() - 1; i >= 0; i--)
    <span style="white-space:pre">		</span>{
    <span style="white-space:pre">			</span>if (i == s.length() - 1)
    <span style="white-space:pre">			</span>{//最后一个加一会溢出  
    <span style="white-space:pre">				</span>result = hashMap.get(s.charAt(i));
    <span style="white-space:pre">				</span>continue;
    <span style="white-space:pre">			</span>}
    <span style="white-space:pre">			</span>if (hashMap.get(s.charAt(i)) >= hashMap.get(s.charAt(i + 1)))
    <span style="white-space:pre">				</span>result += hashMap.get(s.charAt(i));
    <span style="white-space:pre">			</span>else
    <span style="white-space:pre">				</span>result -= hashMap.get(s.charAt(i));
    <span style="white-space:pre">		</span>}
    <span style="white-space:pre">		</span>return result;
    <span style="white-space:pre">	</span>}
    
    
    <span style="white-space:pre">	</span>public static void main(String[] args) {
    <span style="white-space:pre">		</span>String a = "MDCLXXXIX";//1689
    <span style="white-space:pre">		</span>//a = "DCXXI";//1689
    <span style="white-space:pre">		</span>System.out.println(a);
    <span style="white-space:pre">		</span>System.out.println(romanToInt(a));
    <span style="white-space:pre">		</span>System.out.println(romanToInt1(a));
    <span style="white-space:pre">	</span>}
    
    
    }
    








    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值