12. Integer to Roman
题解:
这道题很明显是一道贪心算法的问题,跟找零钱这道题异曲同工之妙,但略有区别,因为它存在 4 = IV 等这种,而不是单纯的 4 = IIII,这是这两道题的最大区别。假如依次分类讨论到底该 IV 还是 IIII 过于麻烦, 有朋友提出了一种思路,很新奇,即将 IV 也看做和 V 一样的单位,此时问题明了了许多,甚是简洁,细节如下:
class Solution {
public:string intToRoman(int num) {int j = unitLen - 1;int tmp = num;string romanStr = "";while(tmp && j >= 0){int t = tmp / unitNum[j];tmp %= unitNum[j];while(t--){romanStr += unitSym[j];}j--;}return romanStr;}
private:const int unitLen = 13;string unitSym[13] = {"I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"};int unitNum[13] = {1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000};
};