Leetcode-12 Integer to Roman

题意大致为输入一个数字,将其转化为对应的罗马数;

思想很简单,用一个数组记录不同的界限值与其对应的符号,然后根据从大到小的顺序对界限值进行遍历,如果剩余值大于当前界限值,则减去它并在结果上加入相对应的字符串,下次遍历将从当前界限值开始,继续向下查找,直到剩余值为零,返回记录的字符串;

代码如下:

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%的提交记录。

原文地址:https://www.cnblogs.com/billdingdj/p/11580965.html