整數轉羅馬數字
羅馬數字包含以下七種字符: 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 到 3999 的范圍內,
示例 1:
輸入: 3
輸出: "III"
示例 2:
輸入: 4
輸出: "IV"
示例 3:
輸入: 9
輸出: "IX"
示例 4:
輸入: 58
輸出: “LVIII”
解釋: L = 50, V = 5, III = 3.
示例 5:
輸入: 1994
輸出: “MCMXCIV”
解釋: M = 1000, CM = 900, XC = 90, IV = 4.
提示:
1 <= num <= 3999
題意:把整數轉為羅馬數字
思路:貪心即可,羅馬數字由 7 個單字母符號組成,同時加上減法規則給出了額外的 6 個符號,總共 13 個獨特的符號,如下圖,每個(組)符號代表不同的數字(圖片來自官方題解),這樣我們就可以從大到小開始貪心,保證前面的字符時符合要求的最大的代表符號即可,比如510,我們是先寫D而不是寫五個C,

正確代碼:
class Solution {
public String intToRoman(int num) {
String []roman = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
int []nums = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
StringBuilder res = new StringBuilder();
for(int i=0;i<nums.length&&num>=0;i++){
while(nums[i]<=num){
num-=nums[i];
res.append(roman[i]);
}
}
return res.toString();
}
}
完成代碼(含測驗樣例):
package com.Keafmd.April.day14;
/**
* Keafmd
*
* @ClassName: IntegerToRoman
* @Description: 整數轉羅馬數字 https://leetcode-cn.com/problems/integer-to-roman/
* @author: 牛哄哄的柯南
* @Date: 2021-04-14 9:37
* @Blog: https://keafmd.blog.csdn.net/
*/
public class IntegerToRoman {
public static void main(String[] args) {
Solution0414 solution0414 = new Solution0414();
int num= 1994;
String result = solution0414.intToRoman(num);
System.out.println("result = " + result);
}
}
class Solution0414 {
public String intToRoman(int num) {
String []roman = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
int []nums = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
StringBuilder res = new StringBuilder();
for(int i=0;i<nums.length&&num>=0;i++){
while(nums[i]<=num){
num-=nums[i];
res.append(roman[i]);
}
}
return res.toString();
}
}
輸出結果:
result = MCMXCIV
Process finished with exit code 0
看完如果對你有幫助,感謝點贊支持!
如果你是電腦端,看到右下角的 “一鍵三連” 了嗎,沒錯點它[哈哈]

加油!
共同努力!
Keafmd
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/276171.html
標籤:java
上一篇:C 動態記憶體分配
