题目:12. 整数转罗马数字
思路:把那些和4、9有关的数也用哈希表一起存起来,然后从最大数开始遍历。
C++版本:
class Solution {
public:
string intToRoman(int num) {
vector<pair<int,string>> mp={
{1,"I"},{4,"IV"},{5,"V"},{9,"IX"},
{10,"X"},{40,"XL"},{50,"L"},{90,"XC"},
{100,"C"},{400,"CD"},{500,"D"},{900,"CM"},{1000,"M"}
};
string s="";
int i=12;
while(num){
if(num/mp[i].first>0){
while(num/mp[i].first>0){
s+=mp[i].second;
num-=mp[i].first;
}
}
i--;
}
return s;
}
};
JAVA版本:
class Solution {
public String intToRoman(int num) {
List<Pair<Integer,String>> mp= new ArrayList<>();
mp.add(new Pair<>(1,"I"));
mp.add(new Pair<>(4,"IV"));
mp.add(new Pair<>(5,"V"));
mp.add(new Pair<>(9,"IX"));
mp.add(new Pair<>(10,"X"));
mp.add(new Pair<>(40,"XL"));
mp.add(new Pair<>(50,"L"));
mp.add(new Pair<>(90,"XC"));
mp.add(new Pair<>(100,"C"));
mp.add(new Pair<>(400,"CD"));
mp.add(new Pair<>(500,"D"));
mp.add(new Pair<>(900,"CM"));
mp.add(new Pair<>(1000,"M"));
StringBuilder s= new StringBuilder();
int i=12;
while(num>0){
int p=mp.get(i).getKey();
String q=mp.get(i).getValue();
if(num/p>0){
while(num/p>0){
s.append(q);
num-=p;
}
}
i--;
}
return s.toString();
}
}
Go版本:
type node struct {
key int
val string
}
func intToRoman(num int) string {
mp:=[]node{
{1,"I"},{4,"IV"},{5,"V"},{9,"IX"},
{10,"X"},{40,"XL"},{50,"L"},{90,"XC"},
{100,"C"},{400,"CD"},{500,"D"},{900,"CM"},{1000,"M"},
}
s:=""
i:=12
for num>0 {
p:=mp[i].key
q:=mp[i].val
if num/p >0 {
for num/p >0 {
s+=q
num-=p
}
}
i--
}
return s
}