13 罗马数字转整数 --java map集合-key值做映射 实现罗马数字转整数

题目描述:

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。

实现思路:

1 调整正负号,来实现加减规则
2 罗马数字只要右边比左边的大,就使用右边的减去左边的 。按照正负数规则,符号就是负号。
当然对应的如果右边的比左边的小就使用右边的加上左边,按照正负数规则,符号就是正号(可以默认不写)
比如:
Iv 右边比左边大 结果就是 v-I =5-1=4
xll 右边比左边小 结果 x+l+l=10+1+1=12

示例:

输入: s = “III”
输出: 3
示例 2:

输入: s = “IV”
输出: 4
示例 3:
提示:

1 <= s.length <= 15
s 仅含字符 (‘I’, ‘V’, ‘X’, ‘L’, ‘C’, ‘D’, ‘M’)
题目数据保证 s 是一个有效的罗马数字,且表示整数在范围 [1, 3999] 内
题目所给测试用例皆符合罗马数字书写规则,不会出现跨位等情况。
IL 和 IM 这样的例子并不符合题目要求,49 应该写作 XLIX,999 应该写作 CMXCIX 。
关于罗马数字的详尽书写规则,可以参考 罗马数字 - Mathematics 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/roman-to-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

实现代码:

 package com.example.likoudemo.day01;

import org.omg.PortableInterceptor.INACTIVE;

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

/**
 * @author 康世行
 * @Title:
 * @Package com.example.likoudemo.day01
 * @Description: 罗马数字转 整数1-3999
 * @date 2021-12-06 9:13
 */
public class Solution {

    private static String solutionToInteger(String s){
        //建立映射关系
        Map<String, Integer> solutionMap= new HashMap<>();
        solutionMap.put("I",1);
        solutionMap.put("V",5);
        solutionMap.put("X",10);
        solutionMap.put("L",50);
        solutionMap.put("C",100);
        solutionMap.put("D",500);
        solutionMap.put("M",1000);
        char[] chars = s.toCharArray();
        //遍历chars数组,把罗马数字转整数
        Integer sum=0;
        for (int i = 0; i < chars.length-1; i++) {
            //判断符号正负
            if(Integer.valueOf(solutionMap.get(String.valueOf(chars[i+1])))>Integer.valueOf(solutionMap.get(String.valueOf(chars[i])))){
               //负数计算
                sum+=-solutionMap.get(String.valueOf(chars[i]));
            }else {
                //正数计算
                sum+=solutionMap.get(String.valueOf(chars[i]));
            }
        }
        //加上最后一个
        sum+=solutionMap.get(String.valueOf(chars[chars.length-1]));
        return sum.toString();
    }
    public static void main(String[] args) {
        String iv = solutionToInteger("VII");
        System.out.println(iv);
    }
}

结果:

力扣:
在这里插入图片描述

IV
在这里插入图片描述
VII
在这里插入图片描述

XII
在这里插入图片描述

欢迎一键三连,支持下小编!!!

posted @ 2022-07-31 17:25  康世行  阅读(46)  评论(0编辑  收藏  举报