LeetCode Roman to Integer

本文介绍了一种将罗马数字转换为整数的算法实现,详细解析了罗马数字的构成规则,并提供了一个Java示例程序来展示如何进行转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given a roman numeral, convert it to an integer.

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



思路是蛮简单的,关键就是理解罗马数字的规则:



羅馬數字共有7個,即I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)。按照下述的規則可以表示任意正整數。需要注意的是罗马数字中没有“0”,與進位制無關。一般認為羅馬數字只用來記數,而不作演算。

  • 重複數次:一個羅馬數字重複幾次,就表示這個數的幾倍。
  • 右加左減:
    • 在較大的羅馬數字的右邊記上較小的羅馬數字,表示大數字加小數字。
    • 在較大的羅馬數字的左邊記上較小的羅馬數字,表示大數字减小數字。
    • 左减的数字有限制,仅限于I、X、C。比如45不可以写成VL,只能是XLV
    • 但是,左減時不可跨越一個位數。比如,99不可以用IC(100 - 1)表示,而是用XCIX([100 - 10] + [10 - 1])表示。(等同於阿拉伯數字每位數字分別表示。)
    • 左減數字必須為一位,比如8寫成VIII,而非IIX。
    • 右加數字不可連續超過三位,比如14寫成XIV,而非XIIII。(見下方“數碼限制”一項。)
  • 加線乘千:
    • 在羅馬數字的上方加上一條橫線或者加上下標的Ⅿ,表示將這個數乘以1000,即是原數的1000倍。
    • 同理,如果上方有兩條橫線,即是原數的1000000(1000^{2})倍。
  • 數碼限制:
    • 同一數碼最多只能出現三次,如40不可表示為XXXX,而要表示為XL。
    • 例外:由於IV是古羅馬神話主神朱庇特(即IVPITER,古羅馬字母裡沒有J和U)的首字,因此有時用IIII代替Ⅳ。


具体方法见注释:


import java.util.*;
public class solution {
	 public static int romanToInt(String s) {
		 Map<String,Integer> roman = new Hashtable<String,Integer>();
		 roman.put("I", 1);
		 roman.put("V", 5);
		 roman.put("X", 10);
		 roman.put("L", 50);
		 roman.put("C", 100);
		 roman.put("D", 500);
		 roman.put("M", 1000);

		 int res = 0;
		 String temp = "";
		 if(s.length()==1)
			 return roman.get(s.charAt(0)+temp);
		 
		 for(int i=s.length()-1;i>=0;i--)
		 {
			 if(i==s.length()-1)
			 {
				 res = roman.get(s.charAt(i)+temp);
				 continue;
			 }
			 
			 if(roman.get(s.charAt(i)+temp)>roman.get(s.charAt(i+1)+temp))
			 {
				 res+=roman.get(s.charAt(i)+temp);
			 }
			 else
				 res-=roman.get(s.charAt(i)+temp);
		 }
		 return res;

	 }

    public static void main(String[] args){

    	int t =romanToInt("MCMXCVI");
    	System.out.println(t);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值