Roman to Integer 【LeetCode】

题目:

Given a roman numeral,convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

Subscribe to see which companies asked this question

解析思路:

罗马数字共有以下七个,分别为I(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。 用罗马数字表示数时
1、如果有几个相同数字并列,表示这个数的值是数码的几倍,例如:3可表示成III,20可表示成XX。
2、不相同的几个数码并列时,如果小的数码在右边,就表示数的数值是这几个数码的和;如果小的数码在左边,就表示数的数值是数码之差。例如:VI表示6,
IV表示4,XI表示11,MCMLXXX表示1980。
3、罗马数字中不存在0.
在Map接口中键和值一一映射,可以通过键来获取值,现将罗马数字作为键,数字作为值
1、如果字符串只有一位,返回该字符对应的数字即可
2、字符串大于1的情况,结果值sum等于sum加上当前字符串对应的数字,若第下一个数也大于当前这个数,则结果值sum等于sum减去2倍的当前数
代码:
import java.util.HashMap;
import java.util.Map;

public class Solution {
	public int romanToInt(String s){
		int sum=0;
		int value1,value2 = 0;
		Map<Character,Integer> m1 = new HashMap<>();
		m1.put('I', 1);
		m1.put('V', 5);
		m1.put('X', 10);
		m1.put('L', 50);
		m1.put('C', 100);
		m1.put('D', 500);
		m1.put('M', 1000);
		if(s.length()==1){
			return m1.get(s.charAt(0));
		}else{
			for(int i=0;i<s.length()-1;i++){
				value1 = m1.get(s.charAt(i));
				value2 = m1.get(s.charAt(i+1));
				sum=sum+value1;
				if(value1<value2){
					sum=sum-2*value1;
				}
			}
			return sum + value2;
		}
		
	}

}

参考链接 点击打开链接



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值