zoukankan      html  css  js  c++  java
  • LeetCode 012. 整数转罗马数字 模拟打表

    地址 https://leetcode-cn.com/problems/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 ,即为两个并列的 112 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。
    
    通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4
    同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况: I 可以放在 V (5) 和 X (10) 的左边,来表示 49。 X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。  C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。 给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。 示例 1: 输入: 3 输出: "III" 示例 2: 输入: 4 输出: "IV" 示例 3: 输入: 9 输出: "IX" 示例 4: 输入: 58 输出: "LVIII" 解释: L = 50, V = 5, III = 3. 示例 5: 输入: 1994 输出: "MCMXCIV" 解释: M = 1000, CM = 900, XC = 90, IV = 4.

    算法1
    观察规律,个十百千万位的 4 5 9 10 特判下就好,
    感觉比中文数字更好转换。
    最后考虑,已经特判上面4个了 不如直接10个数字全部打表算了。
    代码如下

    C++ 代码

    class Solution {
    public:
       map<int, string> A[4]{
        {
        {1,"I"},
        {2,"II"},
        {3,"III"},
    {4,"IV"},
    {5,"V"},
    {6,"VI"},
    {7,"VII"},
    {8,"VIII"},
    {9,"IX"}
    },
    
    {
        {1,"X"},
        {2,"XX"},
        {3,"XXX"},
    {4,"XL"},
    {5,"L"},
    {6,"LX"},
    {7,"LXX"},
    {8,"LXXX"},
    {9,"XC"}
    },
    
    {
        {1,"C"},
        {2,"CC"},
        {3,"CCC"},
    {4,"CD"},
    {5,"D"},
    {6,"DC"},
    {7,"DCC"},
    {8,"DCCC"},
    {9,"CM"}
    },
    { {1,"M"},
        {2,"MM"},
        {3,"MMM"},
    }
    };
    
    
    string intToRoman(int num) {
        string ans;
        vector<string> vec;
        int idx = 0;
        while (num != 0) {
            int n = num % 10;
            vec.push_back( A[idx][n]);
            if (idx < 3) idx++;
            num = num / 10;
        }
    
        for (int i = vec.size() - 1; i >= 0; i--) {
            ans += vec[i];
        }
    
        return ans;
    }
    };
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    Nodejs下载和第一个Nodejs示例
    永久关闭Win10工具栏的TaskbarSearch控件
    对称加密,非对称加密,散列算法,签名算法
    【转】TTL和RS232之间的详细对比
    zlg核心板linux系统中查看系统内存等使用信息
    Power BI后台自动刷新数据报错 The operation was throttled by Power BI Premium because there were too many datasets being processed concurrently.
    剪切板和上传文件内容获取
    CSS, LESS, SCSS, SASS总结
    文字程序
    electron 打包“ERR_ELECTRON_BUILDER_CANNOT_EXECUTE”
  • 原文地址:https://www.cnblogs.com/itdef/p/13746301.html
Copyright © 2011-2022 走看看