主要思想:
将罗马数字的范围分块,其中,最左部分可分为13个点。
对于目标数字,看它在哪个范围内,则它可以拆分为左边节点对应的字符串+(数字-左边界值)的对应罗马字符的组合。
用一个递归算法来实现即可。
1 class Solution { 2 public: 3 string intToRoman(int num) { 4 if(num==0) 5 { 6 return ""; 7 } 8 int nums[13]={1,4,5,9,10,40,50,90,100,400,500,900,1000}; 9 string strs[13]={"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"}; 10 string res=""; 11 for(int i=12;i>=0;i--) 12 { 13 if(num>=nums[i]) 14 { 15 res=res+strs[i]; 16 int temp=num-nums[i]; 17 res=res+intToRoman(temp); 18 break; 19 } 20 } 21 return res; 22 } 23 };