Leetcode013 Roman to Integer

问题

Given a roman numeral, convert it to an integer.

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

给定一个罗马数字,将其转换为阿拉伯数字,输入的范围为1-399

分析

1.先补充一下罗马数字的知识:

(1)连写的数字重复不超过三次,比方说要表示4,就不能是III,而应该是IV;

(2)如果小的数字,它在大的数字的左边,那儿它所表示的数等于大数减小数得到的数,比如:IV = 4;IX = 9;

(3)常用的罗马数字和阿拉伯数字之间的映射:I(1)、V(5)、X(10)、L(50)、C(100)、D(500)、M(1000)

2.所给的罗马数字,使用字符串来表示,其中的每一个字符对应一个阿拉伯数字,罗马数字到阿拉伯数字的转换过程,可以看做将每一个字符对应的阿拉伯数字进行求和,其中,要注意,当前字符所对应的阿拉伯数字如果小于后面一位字符对应的阿拉伯数字,那么就需要减去当前字符对应的阿拉伯数字,返回,则加上当前字符对应的阿拉伯数字。

代码

class Solution {
    //实现将罗马数字转换为阿拉伯数字
    //输入:s为需要被转换的罗马数字
    //输出:转换为阿拉伯数字后的结果
    public int romanToInt(String s) {
        
        
        int len = s.length();
        int[] tran = new int[len];//将每一位字符对应的阿拉伯数字按照顺序存放在数组中
        char temp;
        int res = 0;
        
        for(int i = 0; i <len;i++)
        {
            temp = s.charAt(i); 
            if(temp == 'M')
                tran[i] = 1000;
            if(temp == 'D')
                tran[i] = 500;
            if(temp == 'C')
                tran[i] = 100;
            if(temp == 'L')
                tran[i] = 50;
            if(temp == 'X')
                tran[i] = 10;
            if(temp == 'V')
                tran[i] = 5;
            if(temp == 'I')
                tran[i] = 1;
        }
        
        for(int j = 0;j <len - 1;j++)
        {
            //将当前值与下一位进行比较,当前值小于下一位值,那么需要减去当前值。
            if(tran[j] < tran[j+1])
                tran[j] = tran[j] * -1;
            res += tran[j];
        }
        res += tran[len -1];
        
        return res;
        
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值