13. Roman to Integer

来源:互联网 发布:java实现三级联动 编辑:程序博客网 时间:2024/06/05 18:27

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.

  • 题目大意:将罗马字符转化为数字。

  • 思路:罗马数字转成阿拉伯数字,这里面需要知道罗马数字的构成规则。罗马数字通过7个不同字母的重复或组合,能够表示出所有正整数(罗马数字中没有0)。

    • I = 1
    • V = 5
    • X = 10
    • L = 50
    • C = 100
    • D = 500
    • M = 1000

    比如:IV表示4,VI表示6,XIX表示19,XXI表示21。

    可以找到规律,如果左边的字母表示的数字小于右边的字母,则用右边的数字减去左边的数字;反之,则需要进行加法。

    我们从左向右进行遍历的时候,不太好计算出最终值;从另一个角度考虑,就是从右向左计算,就可以看出来了。

    好了,说到这里,就可以上代码了。

  • 代码:

package String;/** * @Author OovEver * @Date 2017/12/5 20:18 */public class LeetCode13 {    public int romanToInt(String s) {        int[] nums = new int[s.length()];        for(int i=0;i<s.length();i++) {            switch (s.charAt(i)) {                case 'M':                    nums[i]=1000;                    break;                case 'D':                    nums[i]=500;                    break;                case 'C':                    nums[i]=100;                    break;                case 'L':                    nums[i]=50;                    break;                case 'X' :                    nums[i]=10;                    break;                case 'V':                    nums[i]=5;                    break;                case 'I':                    nums[i]=1;                    break;            }        }        int sum = 0;        for (int i = 0; i < nums.length - 1; i++) {            if (nums[i] < nums[i + 1]) {                sum -= nums[i];            } else {                sum += nums[i];            }        }        return sum + nums[nums.length - 1];    }}