当前位置: 首页 > news >正文

【leetcode】Integer to Roman Roman to Integer(easy)

Roman to Integer

Given a roman numeral, convert it to an integer.

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

 

思路:首先要学一下罗马数字是怎么表示的,参见百度百科

 

 

 

其实看了上面罗马数字的介绍,可以建一个对应表 把数字和字母对应起来。遇到 I X C且后面字母的数字更大时 减去当前数字,否则加上。

int romanToInt(string s) {
        int num = 0;
        int c[108];
        c['I'] = 1;  c['V'] = 5;   c['X'] = 10;
        c['L'] = 50; c['C'] = 100; c['D'] = 500; c['M'] = 1000;  
        for(int i = 0; i < s.size(); ++i)
        {
            if((s[i] == 'I' || s[i] == 'X' || s[i] == 'C') && (i + 1 < s.size() && c[s[i + 1]] > c[s[i]])) //如果当前是I X C 且后面的数字更大 减去当前数字
                num -= c[s[i]];
            else
                num += c[s[i]];
        }
        return num;
    }

 

 

Integer to Roman

Given an integer, convert it to a roman numeral.

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

 

思路:还是用到查找表。不过凡是有4或者9的都比较特殊,所以也放在表里,之后查表即可。

string intToRoman(int num) {
        vector<pair<int, string>> v;
        v.push_back(make_pair(1000, "M"));
        v.push_back(make_pair(900, "CM"));
        v.push_back(make_pair(500, "D"));
        v.push_back(make_pair(400, "CD"));
        v.push_back(make_pair(100, "C"));
        v.push_back(make_pair(90, "XC"));
        v.push_back(make_pair(50, "L"));
        v.push_back(make_pair(40, "XL"));
        v.push_back(make_pair(10, "X"));
        v.push_back(make_pair(9, "IX"));
        v.push_back(make_pair(5, "V"));
        v.push_back(make_pair(4, "IV"));
        v.push_back(make_pair(1, "I"));
        string roman;
        for(int i = 0; i < v.size(); ++i)
        {
            int n = num / v[i].first;
            if(((i & 0x1) == 1) && n > 0)
            {
                roman += v[i].second;
                num -= v[i].first;
            }
            else if(((i & 0x1) == 0))
            {
                while(n--)
                    roman += v[i].second;
                num = num % v[i].first;
            }
        }
        return roman;
    }

更快的代码,表做的更全,循环都省了:

class Solution {
public:
    const static string THOUS[];
    const static string HUNDS[];
    const static string TENS[];
    const static string ONES[];
    string intToRoman(int num) {
        string result;
        result += THOUS[(int)(num/1000)%10];
        result += HUNDS[(int)(num/100)%10];
        result += TENS[(int)(num/10)%10];
        result += ONES[num%10];
        return result;
    }
};

const string Solution::THOUS[]  = {"","M","MM","MMM"};
const string Solution::HUNDS[]  = {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
const string Solution::TENS[]   = {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
const string Solution::ONES[]   = {"","I","II","III","IV","V","VI","VII","VIII","IX"};

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java wshh
  • 一个程序员眼中的北京和上海
  • Java 20年:JVM虚拟化技术的发展
  • MAC OSX 下 使用openssl 命令 生成RSA公钥和私钥
  • javaScript 的AMD
  • Java NIO使用及原理分析 (一)
  • 使用ab进行压力测试的简单说明
  • Photoshop - 描边
  • js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
  • js面向对象:创建对象的几种方式
  • 正确理解ThreadLocal(转)
  • 软件工程课程总结
  • HDU 1166 敌兵布阵 (线段树)
  • gps相关
  • ibatis.net的一些映射文件语法
  • hexo+github搭建个人博客
  • SegmentFault for Android 3.0 发布
  • 3.7、@ResponseBody 和 @RestController
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Apache Pulsar 2.1 重磅发布
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • es的写入过程
  • Fundebug计费标准解释:事件数是如何定义的?
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Java知识点总结(JavaIO-打印流)
  • rabbitmq延迟消息示例
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • windows下mongoDB的环境配置
  • 包装类对象
  • 分布式任务队列Celery
  • 高程读书笔记 第六章 面向对象程序设计
  • 再次简单明了总结flex布局,一看就懂...
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (3)(3.5) 遥测无线电区域条例
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (四)软件性能测试
  • (原創) 物件導向與老子思想 (OO)
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)shell调试方法
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET程序集编辑器/调试器 dnSpy 使用介绍
  • [ JavaScript ] JSON方法
  • [.NET]桃源网络硬盘 v7.4
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [000-01-018].第3节:Linux环境下ElasticSearch环境搭建
  • [1]从概念到实践:电商智能助手在AI Agent技术驱动下的落地实战案例深度剖析(AI Agent技术打造个性化、智能化的用户助手)