13. Roman to Integer —— Java

来源:互联网 发布:淘宝网服装男装 编辑:程序博客网 时间:2024/05/16 06:37

Example:

Given "DCXXI"     return 621Given "MCMXCVI"   return 1996



  • 重复数次:一个罗马数字重复几次,就表示这个数的几倍。
  • 右加左减:
    • 在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字。
    • 在较大的罗马数字的左边记上较小的罗马数字,表示大数字减小数字。
    • 左减的数字有限制,仅限于I、X、C。比如45不可以写成VL,只能是XLV
    • 但是,左减时不可跨越一个位值。比如,99不可以用IC({\displaystyle 100-1}100-1)表示,而是用XCIX({\displaystyle [100-10]+[10-1]}[100-10]+[10-1])表示。(等同于阿拉伯数字每位数字分别表示。)
    • 左减数字必须为一位,比如8写成VIII,而非IIX。
    • 右加数字不可连续超过三位,比如14写成XIV,而非XIIII。(见下方“数码限制”一项。)
  • 加线乘千:
    • 在罗马数字的上方加上一条横线或者加上下标的Ⅿ,表示将这个数乘以1000,即是原数的1000倍。
    • 同理,如果上方有两条横线,即是原数的1000000({\displaystyle 1000^{2}}1000^{{2}})倍。
  • 数码限制:
    • 同一数码最多只能连续出现三次,如40不可表示为XXXX,而要表示为XL。
    • 例外:由于IV是古罗马神话主神朱庇特(即IVPITER,古罗马字母里没有J和U)的首字,因此有时用IIII代替IV。


class Solution {    public int romanToInt(String s) {        char[] array = s.toCharArray();        int total = 0;        int temp = 0;        for(int i=0;i<array.length;i++){            if(i != array.length - 1){                if(num(array[i]) < num(array[i+1]))                    temp = -num(array[i]);                else                    temp = num(array[i]);            }            else                temp = num(array[i]);            total += temp;        }        return total;    }    public int num(char c){        switch(c){            case 'M':                return 1000;            case 'D':                return 500;            case 'C':                return 100;            case 'L':                return 50;            case 'X':                return 10;            case 'V':                return 5;            case 'I':                return 1;            default:                return 0;        }    }}


原创粉丝点击