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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值