LeetCode13 罗马数字转整数

问题描述:将罗马数字转换成整数
思路

  • 方法一

设置目标整数tar初始为0。遍历字符串,如果当前罗马字符比下一字符大,tar加上该罗马数字对应整数,反之减去该值。

  • 方法二:

将所有罗马数字对应整数情况进行映射,在遍历字符串的过程中判断是否出现双字符对应情况,出现则加双字符对应值,否则加单字符对应值。

//java
//方法一
class Solution {
    public int romanToInt(String s) {
        String key = "MDCLXVI";
        int[] value = {1000, 500, 100, 50, 10, 5, 1};
        int tar = 0;
        for(int i = 0; i < s.length(); ++i){
            int left = key.indexOf(s.charAt(i));
            if(i == s.length()-1 || value[left] >= value[key.indexOf(s.charAt(i+1))]) tar += value[left];
            else tar -= value[left];
        }
        return tar;
    }
}

//方法二
class Solution {
    public int romanToInt(String s) {
        HashMap<String, Integer> roman = new HashMap<String, Integer>(){
            {put("I", 1);put("IV", 4);put("V", 5);put("IX", 9);put("X", 10);put("XL", 40);put("L", 50);
             put("XC", 90);put("C", 100);put("CD", 400);put("D", 500);put("CM", 900);put("M", 1000);}
        };
        int tar = 0;
        for(int i = 0; i < s.length();){
            if(i < s.length() - 1 && roman.containsKey(s.substring(i, i+2))){//双字符是否在罗马字符表里
                tar += roman.get(s.substring(i, i+2));
                i += 2;
            }else{
                tar += roman.get(s.substring(i, i+1));
                ++i;
            }
        }
        return tar;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leo木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值