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);
}
}
- 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
- 点赞
- 收藏
- 关注作者
评论(0)