力扣LeetCode算法第13题-罗马数字转整数

要求:

输入一串罗马字符串,进行识别并且转为对应的整数

首先讲解下自己的思路:

//M=1000
//D=500
//C=100
//L=50
//X=10
首先,如果大家看到了这串字母,大家的第一反应是啥?仔细观察,这些字母都是唯一不重复的吧!
所以,我们可以考虑使用hashmap的键值对。字母存key,value存大小。

// 罗马字母中有两字母组合的数据。
        // IV=4 用字母a=4代替
        // IX=9 用字母b=9代替
        // XL=40 用字母c=40代替
        // XC=90 用字母d=90代替
        // CD=400 用字母e=400代替
        // CM=900 用字母f=900代替
        s = s.replace("IV","a");
        s = s.replace("IX","b");
        s = s.replace("XL","c");
        s = s.replace("XC","d");
        s = s.replace("CD","e");
        s = s.replace("CM","f");

        //我首先想到的思路是:
        //M=1000
        //D=500
        //C=100
        //L=50
        //X=10
        // 首先,如果大家看到了这串字母,大家的第一反应是啥?仔细观察,这些字母都是唯一不重复的吧!
        // 所以,我们可以考虑使用hashmap的键值对。字母存key,value存大小。
        Map<Character,Integer> map = new HashMap<>();
        map.put('M',1000);
        map.put('D',500);
        map.put('C',100);
        map.put('L',50);
        map.put('X',10);
        map.put('V',5);
        map.put('I',1);
        map.put('a',4);
        map.put('b',9);
        map.put('c',40);
        map.put('d',90);
        map.put('e',400);
        map.put('f',900);

        int result = 0;//记录总和
        //测试数据 String test11="MCMXCIV";//1994
        for (int i = 0; i < s.length(); i++) {
            result+=map.get(s.charAt(i));
        }

        return result;

不过实话实说,我这执行效率确实是低的吓人,哈哈哈!

算法太简单了,简单易理解。

附上所有的代码字段:

package com.zhm.test;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author bige
 * @Date: 2022/11/22 8:59
 * @ApiNote: 罗马数字转整数
 */
public class Leatcode_test013 {

    //输入一串罗马字符串,进行识别并且转为对应的整数

    public static int romanToInt(String s) {
        // 罗马字母中有两字母组合的数据。
        // IV=4 用字母a=4代替
        // IX=9 用字母b=9代替
        // XL=40 用字母c=40代替
        // XC=90 用字母d=90代替
        // CD=400 用字母e=400代替
        // CM=900 用字母f=900代替
        s = s.replace("IV","a");
        s = s.replace("IX","b");
        s = s.replace("XL","c");
        s = s.replace("XC","d");
        s = s.replace("CD","e");
        s = s.replace("CM","f");

        //我首先想到的思路是:
        //M=1000
        //D=500
        //C=100
        //L=50
        //X=10
        // 首先,如果大家看到了这串字母,大家的第一反应是啥?仔细观察,这些字母都是唯一不重复的吧!
        // 所以,我们可以考虑使用hashmap的键值对。字母存key,value存大小。
        Map<Character,Integer> map = new HashMap<>();
        map.put('M',1000);
        map.put('D',500);
        map.put('C',100);
        map.put('L',50);
        map.put('X',10);
        map.put('V',5);
        map.put('I',1);
        map.put('a',4);
        map.put('b',9);
        map.put('c',40);
        map.put('d',90);
        map.put('e',400);
        map.put('f',900);

        int result = 0;//记录总和
        //测试数据 String test11="MCMXCIV";//1994
        for (int i = 0; i < s.length(); i++) {
            result+=map.get(s.charAt(i));
        }

        return result;
    }

    public static void main(String[] args) {
        String test = "III";//3
        String test1 = "IV";//4
        String test2 = "IX";//9
        String test3 = "XL";//40
        String test4 = "XC";//90
        String test5 = "CD";//400
        String test6 = "XLV";//45
        String test7 = "XL";//40
        String test8 = "XC";//90
        String test9 = "CD";//400
        String test10="LVIII";//58
        String test11="MCMXCIV";//1994

        System.out.println(romanToInt(test));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

逼哥很疯狂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值