LeetCode 12 - 整数转罗马数字 - [简单模拟]

题目链接:https://leetcode-cn.com/problems/integer-to-roman/

题解:

把 $1,4,5,9,10,40,50, \cdots, 900, 1000$ 均看做档位,优先转化大的档位,直到不能转化为止,然后降一个档位,继续转化,反复如此直到 $num=0$。

AC代码:

struct Solution
{
    int o[13]={1,4,5,9,10,40,50,90,100,400,500,900,1000};
    string mp[13];
    Solution()
    {
        mp[0]="I", mp[1]="IV", mp[2]="V", mp[3]="IX";
        mp[4]="X", mp[5]="XL", mp[6]="L", mp[7]="XC";
        mp[8]="C", mp[9]="CD", mp[10]="D", mp[11]="CM", mp[12]="M";
    }
    string intToRoman(int num)
    {
        string res;
        int p=12;
        while(num>0)
        {
            while(num<o[p]) p--;
            while(num>=o[p])
            {
                num-=o[p];
                res+=mp[p];
            }
        }
        return res;
    }
};

原文地址:https://www.cnblogs.com/dilthey/p/10561381.html

时间: 2024-08-01 01:01:58

LeetCode 12 - 整数转罗马数字 - [简单模拟]的相关文章

[leetcode] 12. 整数转罗马数字

12. 整数转罗马数字 字符串处理,题超级简单,读懂题直接开干就行. 基本思路就是从大往小一点一点的来表示,具体看代码把: class Solution { public: string intToRoman(int num) { string ans = ""; int m = 0; m = num / 1000; for (int i = 0; i < m; i++) { ans += 'M'; } num %= 1000; if (num >= 900) { ans

LeetCode 12. 整数转罗马数字(Integer to Roman)

题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1.12 写做 XII ,即为 X + II . 27 写做  XXVII, 即为 XX + V + II . 通常情况下,罗马数字中小的数字在大的数字的右边.但也存在特例,例如 4 不写做 IIII,而是 IV.数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到

leetcode 12 整数转罗马数字 贪心

额,连着两个贪心? 这是局部最优问题:能用大“罗马数表示”就不会用小的. 先构造出所有基础罗马数,然后从大到小比较 因为比较的只有1000,900,...有限并有些麻烦,构造table  map<int,string> 然后,map默认安装按照key的值升序排序.. 想从大到小,用reverse_iterator class Solution { public: string intToRoman(int num) { map<int,string> calc = {{1000,&

【算法】【LeetCode】整数转罗马数字

题目: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1.12 写做 XII ,即为 X + II . 27 写做  XXVII, 即为 XX + V + II . 通常情况下,罗马数字中小的数字在大的数字的右边.但也存在特例,例如 4 不写做 IIII,而是 IV.数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 .同样

大整数乘法(简单模拟乘法过程)

一.分析 整数的数值超过计算机硬件所能表示的最大值时,那么我们只能借助软件的方法来实现大整数的乘法了. 我们可以使用字符串来模拟大整数的乘法,算法的思想就是使用我们在小学时学过的乘法,一位位相乘,最后计算出结果.如下: 1    2    3 x    1    2 ------------------------ 2 4 6 1 2 3 ------------------------ 1 4 7 6 为了模拟乘法过程,我们需要使用两个字符串变量,一个保存每一步乘积结果,另一个保存最终的结果.

LeetCode 12 int转罗马数字

class Solution { public: string intToRoman(int num) { string M[] = {"", "M", "MM", "MMM"}; //千位,从1000到三千 string C[] = {"", "C", "CC", "CCC", "CD", "D", &qu

12.整数转罗马数字

题目描述: 解法: 贪心法 class Solution { public: string intToRoman(int num) { vector<int> number = {1000,900,500,400,100,90,50,40,10,9,5,4,1}; vector<string> roman={"M","CM","D","CD","C","XC",&

LeetCode 12 Integer to Roman (整数转罗马数字)

题目链接: https://leetcode.com/problems/integer-to-roman/?tab=Description String M[] = {"", "M", "MM", "MMM”};//1000~3000String C[] = {"", "C", "CC", "CCC", "CD", "D&quo

Leetcode12---&gt;Integer to Roman(整数转换为罗马数字)

题目: 给定一个整数,将其转换为罗马数字; 题目很简单,主要是依靠整数和罗马数字的对应表: I= 1:V= 5: X = 10: L = 50: C = 100: D = 500: M = 1000 代码如下: 1 public class Solution { 2 public String intToRoman(int num) { 3 if(num <= 0) 4 return ""; 5 String[][] RomanDict = new String[][] { 6