题意大致为输入一个数字,将其转化为对应的罗马数;
思想很简单,用一个数组记录不同的界限值与其对应的符号,然后根据从大到小的顺序对界限值进行遍历,如果剩余值大于当前界限值,则减去它并在结果上加入相对应的字符串,下次遍历将从当前界限值开始,继续向下查找,直到剩余值为零,返回记录的字符串;
代码如下:
class Solution { public: struct Dict{ int i; string chara; Dict(int ii,string c){ i=ii; chara=c; } }; static string intToRoman(int num) { int temp=num; string res=""; vector<Dict> dict={Dict(1,"I"),Dict(4,"IV"),Dict(5,"V"), Dict(9,"IX"),Dict(10,"X"),Dict(40,"XL"), Dict(50,"L"),Dict(90,"XC"),Dict(100,"C"), Dict(400,"CD"),Dict(500,"D"),Dict(900,"CM"),Dict(1000,"M") }; while(temp!=0){ for(int i=dict.size()-1;i>=0;i--){ if(temp-dict[i].i>=0){ temp-=dict[i].i; res+=dict[i].chara; i++; continue; } } } return res; } };
该算法时间复杂度超过了100%的提交记录。