拿来吧你!⚡考研面试⚡天天练—— 整数转罗马数字

这是我参与 8 月更文挑战的第 10 天,活动详情查看: 8月更文挑战java

🌺题目:

罗马数字包含如下七种字符: 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 。
一般状况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写作 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减少数 1 获得的数值 4 。一样地,数字 9 表示为 IX。这个特殊的规则只适用于如下六种状况:

I 能够放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 能够放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
C 能够放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给你一个整数,将其转为罗马数字。
复制代码
示例 1:

输入: num = 3
输出: "III"
复制代码
示例 2:

输入: num = 4
输出: "IV"
复制代码
示例 3:

输入: num = 9
输出: "IX"
复制代码
示例 4:

输入: num = 58
输出: "LVIII"
解释: L = 50, V = 5, III = 3.
复制代码
示例 5:

输入: num = 1994
输出: "MCMXCIV"
解释: M = 1000, CM = 900, XC = 90, IV = 4.
复制代码
提示:

1 <= num <= 3999
经过次数213,110提交次数320,090
复制代码

🌺一点点思路

看了这三天作的题之后,以为题仍是能够的不是说让你看到就没有头绪而是看着有点思路,能够跟着本身的思路写下去。**咱们在前期就不要作太难的题以避免会伤害咱们的信心。**好了这道题一看,个人思路就是他说存在特殊值数组

I 能够放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 能够放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
C 能够放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
复制代码

那么咱们对他们特殊对待大不了就和前面的普通字符同样嘛都用哈希表设置一个key,还有一点你们要注意就是100的组成方式有不少种能够是十个10但咱们只能选Cmarkdown

🌺开干

🌺介绍今天的函数

不知道你们对HashMapHashSet的区别知不知道,不知道的同窗要注意哦,说不定面试就问你了(不知道私聊我)。咱们今天介绍HashMap一会将要用到它构造数字和字符之间的对映关系 主要对外接口:app

  • clear()

clear() 的做用是清空HashMap。它是经过将全部的元素设为null来实现的。函数

  • containsKey(key)

containsKey() 的做用是判断HashMap是否包含key。post

  • containsValue(value)

containsValue() 的做用是判断HashMap是否包含“值为value”的元素。ui

  • entrySet()、values()、keySet()

entrySet()的做用是返回“HashMap中全部Entry的集合”,它是一个集合。url

  • get(key)

get() 的做用是获取key对应的value

  • put(key,value)

put() 的做用是对外提供接口,让HashMap对象能够经过put()将“key-value”添加到HashMap中。

  • putAll(map)

putAll() 的做用是将"m"的所有元素都添加到HashMap中

  • remove(key)

remove() 的做用是删除“键为key”元素

  • clone()

克隆一个HashMap,并返回Object对象 我以为弄懂一个本身不会的函数会很高兴大家呢?另外建议这些要和hashset对比记忆。

🌺源码及详解

很尴尬的事情发生了我原本想用HashMap来一个key对应一个值呢,看上面函数介绍我都作好了,作起题的时候发现用不到。哈哈哈那就把它放那里吧咱们来看题解:

public String luoma(int num) {
		int[] a= {1000,900,500,400,100,90,50,40,10,9,5,4,1};//把特殊的也弄成一个键值对
		String[] b= {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
		//用来一会控制数组元素的指针
		int j=0;
		//存放最终输出结果
		String s="";
		for(int i:a) {
		//ans用来记录num/a里的元素的整数值好比4000/1000=4,后面就会出现四个M
			int ans=0;
			if(num!=0) {
				ans=(int)num/i;
				String xue="";//获得重复几个b[j]
				for(int fei=0;fei<ans;fei++) {
					xue=xue+b[j];
				}
				s=s+xue;//将结果字符串相合并
				num=num%i;//去除上面算过的
				j++;//移动指针
			}
		}
		return s;
	 }

复制代码

好了今天的算法题就到这里了,咱们明天再见呀!

相关文章
相关标签/搜索