拿來吧你!⚡考研面試⚡天天練—— 整數轉羅馬數字

這是我參與 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;
	 }

複製代碼

好了今天的算法題就到這裏了,咱們明天再見呀!

相關文章
相關標籤/搜索