LeetCode —— Integer to Roman

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

原文的意思很简单,就是将输入的整型变量转化为罗马数字进行输出,整型变量和罗马数字的转换关系如下所示:

I ( 1 ) , V ( 5 ) , X ( 10 ) , L ( 50 ) , C ( 100 ) , D ( 500 ) , M ( 1000 )

例如: 2341 -> MMCCCXLI 3021 -> MMMXXI

C++ (2ms):

class Solution {
public:
    string intToRoman(int num) {
        stringstream res;
        char roman_numeral[] = {'M','D','C','L','X','V','I'};
        int integer[] = {1000,500,100,50,10,5,1};
        vector<pair<int,char>> integerToroman;
        for(int i=0; i<7; ++i){
            integerToroman.push_back(make_pair(integer[i],roman_numeral[i]));
        }
        int stage;
        for(int j=0;j<7;j+=2)
    {
      if(float(num)/float(integer[j]) >= 1){
        stage=j;
        cout<<num<<endl;
        cout<<stage<<endl;
        break;
      }
    }
        for(int j=stage; j<integerToroman.size(); j+=2)
    {
      int result = num/integerToroman[j].first;
      if(result<4){
        for(int i=0;i<result;i++){
          res << integerToroman[j].second;
        }
      }
      if(result==4){
          res << integerToroman[j].second << integerToroman[j-1].second;
      }
      if(result>4 && result<9){
          res << integerToroman[j-1].second;
          for(int k=5;k<result; k++){
          res << integerToroman[j].second;
          }
      }
       if(result==9){
         res << integerToroman[j].second << integerToroman[j-2].second;
      }
      num = num % integerToroman[j].first;
    }

    return (res.str());
    }
};

Python (30ms)

class Solution(object):
    def intToRoman(self, num):
        """
        :type num: int
        :rtype: str
        """
        roman_numeral=['M','D','C','L','X','V','I']
        integer=[1000,500,100,50,10,5,1]
        stage=0
        res=""
        for i in range(len(integer),2):
            if float(num)/float(integer[i]) >=1:
                stage=i
                break

        for j in range(stage,len(integer),2):
            result=num/integer[j]
            if result<4:
                for k in range(result):
                    res = res + roman_numeral[j]
            elif result ==4:
                res = res + roman_numeral[j]+ roman_numeral[j-1]
            elif result > 4 and result < 9:
                res = res + roman_numeral[j-1]
                for z in range(5,result):
                    res = res + roman_numeral[j]
            elif result==9:
                res = res + roman_numeral[j] + roman_numeral[j-2]
            num = num % integer[j]
        return res

猜你喜欢

转载自blog.csdn.net/hansry/article/details/79690677