
LeetCode 12. 整数转罗马数字题目难度中等题型分类数学、字符串、查表法题目链接整数转罗马数字给定整数num将其转换为罗马数字。罗马数字的基本符号如下符号IVXLCDM数值1510501005001000按千位、百位、十位、个位依次转换并拼接。其中以下数值使用减法形式4 → IV 9 → IX 40 → XL 90 → XC 400 → CD 900 → CMI、X、C、M最多连续出现三次V、L、D不重复使用。示例输入num 3749 输出MMMDCCXLIX 解释3000 700 40 9 → MMM DCC XL IX。 输入num 58 输出LVIII 解释50 8 → L VIII。 输入num 1994 输出MCMXCIV 解释1000 900 90 4 → M CM XC IV。数据范围1 num 3999解题思路使用查表法提前保存每一位对应的罗马数字R[0]个位表示09。R[1]十位表示090步长为10。R[2]百位表示0900步长为100。R[3]千位表示03000步长为1000。分别提取四个数位从高到低查表拼接千位num / 1000 百位num / 100 % 10 十位num / 10 % 10 个位num % 10以上除法均为整数除法。数位为0时对应空字符串不添加任何符号。时间复杂度O(1)题目范围内只需固定次数的查表与拼接。空间复杂度O(1)映射表及结果长度均有固定上限。JavaclassSolution{publicStringintToRoman(intnum){String[][]R{{,I,II,III,IV,V,VI,VII,VIII,IX},{,X,XX,XXX,XL,L,LX,LXX,LXXX,XC},{,C,CC,CCC,CD,D,DC,DCC,DCCC,CM},{,M,MM,MMM}};returnR[3][num/1000]R[2][num/100%10]R[1][num/10%10]R[0][num%10];}}CclassSolution{public:stringintToRoman(intnum){vectorvectorstringR{{,I,II,III,IV,V,VI,VII,VIII,IX},{,X,XX,XXX,XL,L,LX,LXX,LXXX,XC},{,C,CC,CCC,CD,D,DC,DCC,DCCC,CM},{,M,MM,MMM}};returnR[3][num/1000]R[2][num/100%10]R[1][num/10%10]R[0][num%10];}};Python 3classSolution:defintToRoman(self,num:int)-str:R[[,I,II,III,IV,V,VI,VII,VIII,IX],[,X,XX,XXX,XL,L,LX,LXX,LXXX,XC],[,C,CC,CCC,CD,D,DC,DCC,DCCC,CM],[,M,MM,MMM]]return(R[3][num//1000]R[2][num//100%10]R[1][num//10%10]R[0][num%10])