• 12. 整数转罗马数字(贪心!)


    题目

    12. 整数转罗马数字

    我的思路

    对十进制数字,从高位到低位逐个转换即可?

    我的实现

    class Solution {
    public:
        string intToRoman(int num) {
            string result;
            while(num>=1000){
                num-=1000;
                result.push_back('M');
            }
            if(num>=900){
                num-=900;
                result.push_back('C');
                result.push_back('M');
            }else if(num>=400&&num<500){
                num-=400;
                result.push_back('C');
                result.push_back('D');
            }else if(num>=500){
                result.push_back('D');
                num=num-500;
            }
            while(num>=100){
                    num-=100;
                    result.push_back('C');
            }
    
            if(num>=90){
                num-=90;
                result.push_back('X');
                result.push_back('C');
            }else if(num>=40&&num<50){
                num-=40;
                result.push_back('X');
                result.push_back('L');
            }else if(num>=50){
                result.push_back('L');
                num=num-50;
            }
            while(num>=10){
                    num-=10;
                    result.push_back('X');
            }
    
            if(num>=9){
                num-=9;
                result.push_back('I');
                result.push_back('X');
            }else if(num>=4&&num<5){
                num-=4;
                result.push_back('I');
                result.push_back('V');
            }else if(num>=5){
                result.push_back('V');
                num=num-5;
            }
            while(num>=1){
                    num-=1;
                    result.push_back('I');
            }
    
            return result;
    
        }
    };
    /*
    对十进制数字,从高位到低位逐个转换即可?
    */

    拓展学习

    其实可以观察转换规律,更简洁优美。贪心算法

    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;
            int 
            for (int i = 0; i < 13; i ++ )  //这里不使用图里的count了,一遍一遍来就行了
                while(num >= values[i])
                {
                    num -= values[i];
                    res += reps[i];
                }
            return res;
        }
    };
    
    作者:z1m
    链接:https://leetcode-cn.com/problems/integer-to-roman/solution/tan-xin-ha-xi-biao-tu-jie-by-ml-zimingmeng/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    POJ3764 The xorlongest Path
    POJ1733 Parity game
    POJ3301 Texas Trip
    POJ2135 Farm Tour
    POJ2516 Minimum Cost
    Mem478
    PROJECTEULER48
    POJ1201 Intervals
    CSS 伪元素 (Pseudoelements)
    JQuery显示隐藏层
  • 原文地址:https://www.cnblogs.com/BoysCryToo/p/13439183.html
Copyright © 2020-2023  润新知