LeetCode 每日一题 12.整数转罗马数字

LeetCode 每日一题 12.整数转罗马数字


问题描述

在这里插入图片描述

简要思路

通过取余和取模,从高位到低位,一位位地进行判断,并输出相应的罗马字母。
题目不难但是写起来较麻烦,在评论看到了更简洁的解法,贴在了解法2,不过没有解法1速度快。

代码

解法1:

class Solution {
    
    
public:
    string intToRoman(int num) {
    
    
        string output_str;
        int p;
        p = num / 1000;
        num %= 1000;
        if(p>0){
    
    
            for(int i=0; i<p; i++){
    
    
                output_str += "M";
            }
        }

        p = num / 100;
        num %= 100;
        if(p>0){
    
    
            if(p<4){
    
    
                for(int i=0;  i<p; i++){
    
    
                    output_str += "C";
                }
            }
            else if(p == 4) output_str += "CD";
            else if(p < 9){
    
    
                output_str += "D";
                for(int i=0; i<(p-5); i++){
    
    
                    output_str += "C";
                }
            }
            else output_str += "CM";
        }

        p = num / 10;
        num %= 10;
        if(p>0){
    
    
            if(p<4){
    
    
                for(int i=0;  i<p; i++){
    
    
                    output_str += "X";
                }
            }
            else if(p == 4) output_str += "XL";
            else if(p < 9){
    
    
                output_str += "L";
                for(int i=0; i<(p-5); i++){
    
    
                    output_str += "X";
                }
            }
            else output_str += "XC";
        }

        if(num>0){
    
    
            if(num<4){
    
    
                for(int i=0;  i<num; i++){
    
    
                    output_str += "I";
                }
            }
            else if(num == 4) output_str += "IV";
            else if(num < 9){
    
    
                output_str += "V";
                for(int i=0; i<(num-5); i++){
    
    
                    output_str += "I";
                }
            }
            else output_str += "IX";
        }

        return output_str;
    }
};

解法2:

class Solution {
    
    
public:
    string intToRoman(int num) {
    
    
        int values[]={
    
    1000,900,500,400,100,90,50,40,10,9,5,4,1};
        string reps[]={
    
    "M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
        
        string res;
        for(int i=0; i<13; i++){
    
    
            while(num>=values[i]){
    
    
                num -= values[i];
                res += reps[i];
            }
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_45438600/article/details/116795237
今日推荐