继上一篇写的,又看到了一个比较简洁的方法:
class Solution {
public:
string intToRoman(int num) {
int values[]={1000,900,500,400,100,90,50,40,10,9,5,4,1};
string reps[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
string res;
for(int i=0; i<13; i++){
while(num>=values[i]){
num -= values[i];
res += reps[i];
}
}
return res;
}
};
再贴一个大哥写的:
class Solution:
def intToRoman(self, num: int) -> str:
s=str(num)
if num<4:
return 'I'*num
elif num==4:
return 'IV'
elif num<9:
return 'V'+'I'*(num-5)
elif num==9:
return 'IX'
#<39
elif num<40:
if s[1]=='4':
return 'X'*(num//10)+'IV'
elif s[1]=='9':
return 'X'*(num//10)+'IX'
elif int(s[1])<4:
return 'X'*(num//10)+'I'*(int(s[1]))
elif int(s[1])<9:
return 'X'*(num//10)+'V'+'I'*(int(s[1])-5)
#40-49
elif num<50:
if s[1]=='4':
return 'XL'+'IV'
elif s[1]=='9':
return 'XL'+'IX'
elif int(s[1])<4:
return 'XL'+'I'*(int(s[1]))
elif int(s[1])<9:
return 'XL'+'V'+'I'*(int(s[1])-5)
#50-89
elif num<90:
if s[1]=='4':
return 'L'+'X'*((num-50)//10)+'IV'
elif s[1]=='9':
return 'L'+'X'*((num-50)//10)+'IX'
elif int(s[1])<4:
return 'L'+'X'*((num-50)//10)+'I'*(int(s[1]))
elif int(s[1])<9:
return 'L'+'X'*((num-50)//10)+'V'+'I'*(int(s[1])-5)
#90-99
elif num<100:
if s[1]=='4':
return 'XC'+'IV'
elif s[1]=='9':
return 'XC'+'IX'
elif int(s[1])<4:
return 'XC'+'I'*(int(s[1]))
elif int(s[1])<9:
return 'XC'+'V'+'I'*(int(s[1])-5)
#100-399
elif num<400:
if s[1]=='4':
if s[2]=='4':
return 'C'*(num//100)+'XL'+'IV'
elif s[2]=='9':
return 'C'*(num//100)+'XL'+'IX'
elif int(s[2])<4:
return 'C'*(num//100)+'XL'+'I'*int(s[2])
else:
return 'C'*(num//100)+'XL'+'V'+'I'*(int(s[2])-5)
elif s[1]=='9':
if s[2]=='4':
return 'C'*(num//100)+'XC'+'IV'
elif s[2]=='9':
return 'C'*(num//100)+'XC'+'IX'
elif int(s[2])<4:
return 'C'*(num//100)+'XC'+'I'*int(s[2])
else:
return 'C'*(num//100)+'XC'+'V'+'I'*(int(s[2])-5)
elif int(s[1])<4:
if s[2]=='4':
return 'C'*(num//100)+'X'*(int(s[1]))+'IV'
elif s[2]=='9':
return 'C'*(num//100)+'X'*(int(s[1]))+'IX'
elif int(s[2])<4:
return 'C'*(num//100)+'X'*(int(s[1]))+'I'*int(s[2])
else:
return 'C'*(num//100)+'X'*(int(s[1]))+'V'+'I'*(int(s[2])-5)
else:
if s[2]=='4':
return 'C'*(num//100)+'L'+'X'*(int(s[1])-5)+'IV'
elif s[2]=='9':
return 'C'*(num//100)+'L'+'X'*(int(s[1])-5)+'IX'
elif int(s[2])<4:
return 'C'*(num//100)+'L'+'X'*(int(s[1])-5)+'I'*int(s[2])
else:
return 'C'*(num//100)+'L'+'X'*(int(s[1])-5)+'V'+'I'*(int(s[2])-5)
#400-499
elif num<500:
if s[1]=='4':
if s[2]=='4':
return 'CD'+'XL'+'IV'
elif s[2]=='9':
return 'CD'+'XL'+'IX'
elif int(s[2])<4:
return 'CD'+'XL'+'I'*int(s[2])
else:
return 'CD'+'XL'+'V'+'I'*(int(s[2])-5)
elif s[1]=='9':
if s[2]=='4':
return 'CD'+'XC'+'IV'
elif s[2]=='9':
return 'CD'+'XC'+'IX'
elif int(s[2])<4:
return 'CD'+'XC'+'I'*int(s[2])
else:
return 'CD'+'XC'+'V'+'I'*(int(s[2])-5)
elif int(s[1])<4:
if s[2]=='4':
return 'CD'+'X'*(int(s[1]))+'IV'
elif s[2]=='9':
return 'CD'+'X'*(int(s[1]))+'IX'
elif int(s[2])<4:
return 'CD'+'X'*(int(s[1]))+'I'*int(s[2])
else:
return 'CD'+'X'*(int(s[1]))+'V'+'I'*(int(s[2])-5)
else:
if s[2]=='4':
return 'CD'+'L'+'X'*(int(s[1])-5)+'IV'
elif s[2]=='9':
return 'CD'+'L'+'X'*(int(s[1])-5)+'IX'
elif int(s[2])<4:
return 'CD'+'L'+'X'*(int(s[1])-5)+'I'*int(s[2])
else:
return 'CD'+'L'+'X'*(int(s[1])-5)+'V'+'I'*(int(s[2])-5)
# 500-899
elif num<900:
if s[1]=='4':
if s[2]=='4':
return 'D'*(num//500)+'C'*((num-500)//100)+'XL'+'IV'
elif s[2]=='9':
return 'D'*(num//500)+'C'*((num-500)//100)+'XL'+'IX'
elif int(s[2])<4:
return 'D'*(num//500)+'C'*((num-500)//100)+'XL'+'I'*int(s[2])
else:
return 'D'*(num//500)+'C'*((num-500)//100)+'XL'+'V'+'I'*(int(s[2])-5)
elif s[1]=='9':
if s[2]=='4':
return 'D'*(num//500)+'C'*((num-500)//100)+'XC'+'IV'
elif s[2]=='9':
return 'D'*(num//500)+'C'*((num-500)//100)+'XC'+'IX'
elif int(s[2])<4:
return 'D'*(num//500)+'C'*((num-500)//100)+'XC'+'I'*int(s[2])
else:
return 'D'*(num//500)+'C'*((num-500)//100)+'XC'+'V'+'I'*(int(s[2])-5)
elif int(s[1])<4:
if s[2]=='4':
return 'D'*(num//500)+'C'*((num-500)//100)+'X'*(int(s[1]))+'IV'
elif s[2]=='9':
return 'D'*(num//500)+'C'*((num-500)//100)+'X'*(int(s[1]))+'IX'
elif int(s[2])<4:
return 'D'*(num//500)+'C'*((num-500)//100)+'X'*(int(s[1]))+'I'*int(s[2])
else:
return 'D'*(num//500)+'C'*((num-500)//100)+'X'*(int(s[1]))+'V'+'I'*(int(s[2])-5)
else:
if s[2]=='4':
return 'D'*(num//500)+'C'*((num-500)//100)+'L'+'X'*(int(s[1])-5)+'IV'
elif s[2]=='9':
return 'D'*(num//500)+'C'*((num-500)//100)+'L'+'X'*(int(s[1])-5)+'IX'
elif int(s[2])<4:
return 'D'*(num//500)+'C'*((num-500)//100)+'L'+'X'*(int(s[1])-5)+'I'*int(s[2])
else:
return 'D'*(num//500)+'C'*((num-500)//100)+'L'+'X'*(int(s[1])-5)+'V'+'I'*(int(s[2])-5)
# 900-999
elif num<1000:
if s[1]=='4':
if s[2]=='4':
return 'CM'+'XL'+'IV'
elif s[2]=='9':
return 'CM'+'XL'+'IX'
elif int(s[2])<4:
return 'CM'+'XL'+'I'*int(s[2])
else:
return 'CM'+'XL'+'V'+'I'*(int(s[2])-5)
elif s[1]=='9':
if s[2]=='4':
return 'CM'+'XC'+'IV'
elif s[2]=='9':
return 'CM'+'XC'+'IX'
elif int(s[2])<4:
return 'CM'+'XC'+'I'*int(s[2])
else:
return 'CM'+'XC'+'V'+'I'*(int(s[2])-5)
elif int(s[1])<4:
if s[2]=='4':
return 'CM'+'X'*(int(s[1]))+'IV'
elif s[2]=='9':
return 'CM'+'X'*(int(s[1]))+'IX'
elif int(s[2])<4:
return 'CM'+'X'*(int(s[1]))+'I'*int(s[2])
else:
return 'CM'+'X'*(int(s[1]))+'V'+'I'*(int(s[2])-5)
else:
if s[2]=='4':
return 'CM'+'L'+'X'*(int(s[1])-5)+'IV'
elif s[2]=='9':
return 'CM'+'L'+'X'*(int(s[1])-5)+'IX'
elif int(s[2])<4:
return 'CM'+'L'+'X'*(int(s[1])-5)+'I'*int(s[2])
else:
return 'CM'+'L'+'X'*(int(s[1])-5)+'V'+'I'*(int(s[2])-5)
#1000-3999
else:
if s[1]=='4':
if s[2]=='4':
if s[3]=='4':
return 'M'*(int(s[0]))+'CD'+'XL'+'IV'
if int(s[3])<4:
return 'M'*(int(s[0]))+'CD'+'XL'+'I'*(int(s[3]))
if int(s[3])==9:
return 'M'*(int(s[0]))+'CD'+'XL'+'IX'
else:
return 'M'*(int(s[0]))+'CD'+'XL'+'V'+'I'*(int(s[3])-5)
elif s[2]=='9':
if s[3]=='4':
return 'M'*(int(s[0]))+'CD'+'XC'+'IV'
if int(s[3])<4:
return 'M'*(int(s[0]))+'CD'+'XC'+'I'*(int(s[3]))
if int(s[3])==9:
return 'M'*(int(s[0]))+'CD'+'XC'+'IX'
else:
return 'M'*(int(s[0]))+'CD'+'XC'+'V'+'I'*(int(s[3])-5)
elif int(s[2])<4:
if s[3]=='4':
return 'M'*(int(s[0]))+'CD'+'X'*(int(s[2]))+'IV'
if int(s[3])<4:
return 'M'*(int(s[0]))+'CD'+'X'*(int(s[2]))+'I'*(int(s[3]))
if int(s[3])==9:
return 'M'*(int(s[0]))+'CD'+'X'*(int(s[2]))+'IX'
else:
return 'M'*(int(s[0]))+'CD'+'X'*(int(s[2]))+'V'+'I'*(int(s[3])-5)
else:
if s[3]=='4':
return 'M'*(int(s[0]))+'CD'+'L'+'X'*(int(s[2])-5)+'IV'
if int(s[3])<4:
return 'M'*(int(s[0]))+'CD'+'L'+'X'*(int(s[2])-5)+'I'*(int(s[3]))
if int(s[3])==9:
return 'M'*(int(s[0]))+'CD'+'L'+'X'*(int(s[2])-5)+'IX'
else:
return 'M'*(int(s[0]))+'CD'+'L'+'X'*(int(s[2])-5)+'V'+'I'*(int(s[3])-5)
elif s[1]=='9':
if s[2]=='4':
if s[3]=='4':
return 'M'*(int(s[0]))+'CM'+'XL'+'IV'
if int(s[3])<4:
return 'M'*(int(s[0]))+'CM'+'XL'+'I'*(int(s[3]))
if int(s[3])==9:
return 'M'*(int(s[0]))+'CM'+'XL'+'IX'
else:
return 'M'*(int(s[0]))+'CM'+'XL'+'V'+'I'*(int(s[3])-5)
elif s[2]=='9':
if s[3]=='4':
return 'M'*(int(s[0]))+'CM'+'XC'+'IV'
if int(s[3])<4:
return 'M'*(int(s[0]))+'CM'+'XC'+'I'*(int(s[3]))
if int(s[3])==9:
return 'M'*(int(s[0]))+'CM'+'XC'+'IX'
else:
return 'M'*(int(s[0]))+'CM'+'XC'+'V'+'I'*(int(s[3])-5)
elif int(s[2])<4:
if s[3]=='4':
return 'M'*(int(s[0]))+'CM'+'X'*(int(s[2]))+'IV'
if int(s[3])<4:
return 'M'*(int(s[0]))+'CM'+'X'*(int(s[2]))+'I'*(int(s[3]))
if int(s[3])==9:
return 'M'*(int(s[0]))+'CM'+'X'*(int(s[2]))+'IX'
else:
return 'M'*(int(s[0]))+'CM'+'X'*(int(s[2]))+'V'+'I'*(int(s[3])-5)
else:
if s[3]=='4':
return 'M'*(int(s[0]))+'CM'+'L'+'X'*(int(s[2])-5)+'IV'
if int(s[3])<4:
return 'M'*(int(s[0]))+'CM'+'L'+'X'*(int(s[2])-5)+'I'*(int(s[3]))
if int(s[3])==9:
return 'M'*(int(s[0]))+'CM'+'L'+'X'*(int(s[2])-5)+'IX'
else:
return 'M'*(int(s[0]))+'CM'+'L'+'X'*(int(s[2])-5)+'V'+'I'*(int(s[3])-5)
elif int(s[1])<4:
if s[2]=='4':
if s[3]=='4':
return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XL'+'IV'
if int(s[3])<4:
return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XL'+'I'*(int(s[3]))
if int(s[3])==9:
return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XL'+'IX'
else:
return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XL'+'V'+'I'*(int(s[3])-5)
elif s[2]=='9':
if s[3]=='4':
return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XC'+'IV'
if int(s[3])<4:
return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XC'+'I'*(int(s[3]))
if int(s[3])==9:
return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XC'+'IX'
else:
return 'M'*(int(s[0]))+'C'*(int(s[1]))+'XC'+'V'+'I'*(int(s[3])-5)
elif int(s[2])<4:
if s[3]=='4':
return 'M'*(int(s[0]))+'C'*(int(s[1]))+'X'*(int(s[2]))+'IV'
if int(s[3])<4:
return 'M'*(int(s[0]))+'C'*(int(s[1]))+'X'*(int(s[2]))+'I'*(int(s[3]))
if int(s[3])==9:
return 'M'*(int(s[0]))+'C'*(int(s[1]))+'X'*(int(s[2]))+'IX'
else:
return 'M'*(int(s[0]))+'C'*(int(s[1]))+'X'*(int(s[2]))+'V'+'I'*(int(s[3])-5)
else:
if s[3]=='4':
return 'M'*(int(s[0]))+'C'*(int(s[1]))+'L'+'X'*(int(s[2])-5)+'IV'
if int(s[3])<4:
return 'M'*(int(s[0]))+'C'*(int(s[1]))+'L'+'X'*(int(s[2])-5)+'I'*(int(s[3]))
if int(s[3])==9:
return 'M'*(int(s[0]))+'C'*(int(s[1]))+'L'+'X'*(int(s[2])-5)+'IX'
else:
return 'M'*(int(s[0]))+'C'*(int(s[1]))+'L'+'X'*(int(s[2])-5)+'V'+'I'*(int(s[3])-5)
else:
if s[2]=='4':
if s[3]=='4':
return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XL'+'IV'
if int(s[3])<4:
return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XL'+'I'*(int(s[3]))
if int(s[3])==9:
return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XL'+'IX'
else:
return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XL'+'V'+'I'*(int(s[3])-5)
elif s[2]=='9':
if s[3]=='4':
return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XC'+'IV'
if int(s[3])<4:
return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XC'+'I'*(int(s[3]))
if int(s[3])==9:
return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XC'+'IX'
else:
return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'XC'+'V'+'I'*(int(s[3])-5)
elif int(s[2])<4:
if s[3]=='4':
return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'X'*(int(s[2]))+'IV'
if int(s[3])<4:
return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'X'*(int(s[2]))+'I'*(int(s[3]))
if int(s[3])==9:
return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'X'*(int(s[2]))+'IX'
else:
return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'X'*(int(s[2]))+'V'+'I'*(int(s[3])-5)
else:
if s[3]=='4':
return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'L'+'X'*(int(s[2])-5)+'IV'
if int(s[3])<4:
return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'L'+'X'*(int(s[2])-5)+'I'*(int(s[3]))
if int(s[3])==9:
return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'L'+'X'*(int(s[2])-5)+'IX'
else:
return 'M'*(int(s[0]))+'D'+'C'*(int(s[1])-5)+'L'+'X'*(int(s[2])-5)+'V'+'I'*(int(s[3])-5)