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

举报
ksh1998 发表于 2021/12/25 22:09:24 2021/12/25
【摘要】 题目描述: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ...

题目描述:

罗马数字包含以下七种字符: 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);
    }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

结果:

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

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

XII
在这里插入图片描述

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

文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。

原文链接:kangshihang.blog.csdn.net/article/details/121806239

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。