13. Roman to Integer

题目链接:https://leetcode.com/problems/roman-to-integer/description/
汉字意思大概就是:罗马数字字符串转换为整形数字。想要解决这道题,首先得充分理解罗马数字的特点,可以看百科百科:https://baike.baidu.com/item/%E7%BD%97%E9%A9%AC%E6%95%B0%E5%AD%97/772296?fr=aladdin
刚开始我自己对罗马数字特点不熟悉,所以对这道简单的题目一脸懵逼,然后看了下别人提交的答案,找到了两个质量较高的答案吧:

/**
 * Created by clearbug on 2018/2/26.
 */
public class Solution {

    public static void main(String[] args) {
        System.out.println("romanToInt = " + romanToInt("I") + ", romanToInt2 = " + romanToInt2("I"));
        System.out.println("romanToInt = " + romanToInt("X") + ", romanToInt2 = " + romanToInt2("X"));
        System.out.println("romanToInt = " + romanToInt("C") + ", romanToInt2 = " + romanToInt2("C"));
        System.out.println("romanToInt = " + romanToInt("M") + ", romanToInt2 = " + romanToInt2("M"));
        System.out.println("romanToInt = " + romanToInt("III") + ", romanToInt2 = " + romanToInt2("III"));
        System.out.println("romanToInt = " + romanToInt("IV") + ", romanToInt2 = " + romanToInt2("IV"));
        System.out.println("romanToInt = " + romanToInt("VI") + ", romanToInt2 = " + romanToInt2("VI"));
        System.out.println("romanToInt = " + romanToInt("XIX") + ", romanToInt2 = " + romanToInt2("XIX"));
        System.out.println("romanToInt = " + romanToInt("XI") + ", romanToInt2 = " + romanToInt2("XI"));
        System.out.println("romanToInt = " + romanToInt("XX") + ", romanToInt2 = " + romanToInt2("XX"));
        System.out.println("romanToInt = " + romanToInt("XLV") + ", romanToInt2 = " + romanToInt2("XLV"));
        System.out.println("romanToInt = " + romanToInt("MCMLXXX") + ", romanToInt2 = " + romanToInt2("MCMLXXX"));
    }

    public static int romanToInt(String s) {
        int sum = 0;
        if (s.contains("IV")) {
            sum -= 2;
        }
        if (s.contains("IX")) {
            sum -= 2;
        }
        if (s.contains("XL")) {
            sum -= 20;
        }
        if (s.contains("XC")) {
            sum -= 20;
        }
        if (s.contains("CD")) {
            sum -= 200;
        }
        if (s.contains("CM")) {
            sum -= 200;
        }

        char[] cArr = s.toCharArray();
        for (int i = 0; i < cArr.length; i++) {
            if (cArr[i] == 'M') {
                sum += 1000;
            }
            if (cArr[i] == 'D') {
                sum += 500;
            }
            if (cArr[i] == 'C') {
                sum += 100;
            }
            if (cArr[i] == 'L') {
                sum += 50;
            }
            if (cArr[i] == 'X') {
                sum += 10;
            }
            if (cArr[i] == 'V') {
                sum += 5;
            }
            if (cArr[i] == 'I') {
                sum += 1;
            }
        }

        return sum;
    }

    public static int romanToInt2(String s) {
        int res = 0;
        for (int i = s.length() - 1; i >= 0; i--) {
            char c = s.charAt(i);
            switch (c) {
                case 'I':
                    res += (res >= 5 ? -1 : 1);
                    break;
                case 'V':
                    res += 5;
                    break;
                case 'X':
                    res += 10 * (res >= 50 ? -1 : 1);
                    break;
                case 'L':
                    res += 50;
                    break;
                case 'C':
                    res += 100 * (res >= 500 ? -1 : 1);
                    break;
                case 'D':
                    res += 500;
                    break;
                case 'M':
                    res += 1000;
                    break;
            }
        }
        return res;
    }

}
posted @ 2018-03-04 10:48  optor  阅读(148)  评论(0编辑  收藏  举报