13. Roman to Integer

13. Roman to Integer

题目

罗马数字由7个符号表示: I, V, X, L, C, D 和M。
相应的值是:

Symbol(加法)Value
I1
V5
X10
L50
C100
D500
M1000

例如,
2在罗马数字中写作II,就是把两个1加在一起。
12写作XII,即X+II。
27写作XXVII,即 XX + V + II。
但是4就写作IV,V - I。
9也是写作IX,即X - I。
有6个例子使用减法:

Symbol (减法)Value
IV4
IX9
XL40
XC90
CD400
CM900

给出一个罗马数字,将它转换成一个整数。输入确保在(1 - 3999)之间。

例1:
Input: “III”
Output: 3

例2:
Input: “IV”
Output: 4

例3:
Input: “IX”
Output: 9

例4:
Input: “LVIII”
Output: 58
解释: C = 100, L = 50, XXX = 30 and III = 3.

例5:
Input: “MCMXCIV”
Output: 1994
解释:M = 1000, CM = 900, XC = 90 and IV = 4.

代码块

class Solution {
    public int romanToInt(String s) {
        int num[] = new int[s.length()];
        int sum = 0;
        for(int i = 0; i < s.length(); i++){
                switch(s.charAt(i)){
                case 'I':
                     num[i] = 1;
                    break;
                case 'V':
                    num[i] = 5;
                    break;
                case 'X':
                    num[i] = 10;
                    break;
                case 'L':
                    num[i] = 50;
                    break;
                case 'C':
                    num[i] = 100;
                    break;
                case 'D':
                    num[i] = 500;
                    break;
                case 'M':
                    num[i] = 1000;
                    break;
            }

        }

        for(int i = 0; i < num.length - 1 ; i++){
            if(num[i] >= num[i+1]){
                sum = sum + num[i];
            }else{

                sum = sum  - num[i]; 
            }
        }
        return sum + num[num.length - 1];//在循环中,最后一个数字没考虑,加在这里不会越界。
    }
}

代码分析

这道题是easy的类型,要把罗马数字转换为Int型,首先要了解罗马数字的构成,然后才可以分析这道题。不单需要把相应的罗马数字转换成对应的数字,还要考虑4,9,这种特殊类型。所以:
1. 首先,建立一个与字符串s等长的数组;
2. 然后,将每一位字符与整数一一对应;
3. 最后处理数组;
- 如果是正常类型的,就将各位数字累加;
- 如果是特殊情况,即前面的数字比后一位小,就做减法;(4,9,40, 90…)
4. 最后处理边界。
- 因为for循环中没有考虑最后一位数字,即num[length - 1],不然num[i+1]会越界。所以要把它单独处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值