【算法百题之四十】整数转罗马数字

   大家好,我是Lampard~~

   很高兴又能和大家见面了,接下来准备系列更新的是算法题,一日一练,早日升仙!

   今天的问题是:整数转罗马数字(贪心算法)

 

思路:这道题主要是用到了贪心算法,从大往小一直把数字输出。什么是贪心算法呢?举个例子:

生活中的经验:

在以前还使用现金购物的时候,找零钱的时候一般商家会尽量选择面值大的纸币(硬币)给顾客,这样才会使得给顾客的纸币(硬币)张数最少,让顾客点钱的时候更方便。

这道题也一样,由于已经定义好了数值范围1~3999,那么我们从千到百这样往下判断,把符合条件的字符串先记录下来然后慢慢拼接即可。此时要注意题目给出的6个特殊情况,若是遇到了4和9那么就可以直接拼接字符串不需要进行判断5和1。首先我们用一个字典存起通用的罗马字符与数字的键值对,然后我们再记录下特殊的6种情况

map<int, string> num2str;
num2str[1] = "I";
num2str[5] = "V";
num2str[10] = "X";
num2str[50] = "L";
num2str[100] = "C";
num2str[500] = "D";
num2str[1000] = "M";
num2str[4] = "IV";
num2str[9] = "IX";
num2str[40] = "XL";
num2str[90] = "XC";
num2str[400] = "CD";
num2str[900] = "CM";

然后我们把curNum记录成1000(从千到百这样往下进行贪心算法),若不存在千位则继续判断百位,若存在千位则判断当前位是不是特殊情况(4或9)?若不是则对该位进行是否比5大进行判断,紧接着再把余下的小于5的部分分成数个1然后根据字典转换字符进行拼接

 int curNum = 1000;string res = "";while (curNum != 0) {int tmp = num / curNum;if (tmp == 0) {curNum /= 10;continue;}// 先进性特殊情况的判断if (num2str.count(tmp * curNum) != 0) {res = res + num2str[tmp * curNum];num %= curNum;curNum /= 10;continue;}if (tmp > 5 && num2str.count(5 * curNum) != 0) {res = res + num2str[5 * curNum];tmp %= 5;}while (tmp > 0) {tmp -= 1;res = res + num2str[curNum];}num %= curNum;curNum /= 10;}return res;

测试函数以及测试结果:

OK,今天的博客就到这里,谢谢大家!!!

【算法百题之四十】整数转罗马数字相关推荐

  1. 【算法百题之四十二】罗马数字转整数

    [算法百题之四十二]罗马数字转整数    大家好,我是Lampard~~    很高兴又能和大家见面了,接下来准备系列更新的是算法题,一日一练,早日升仙!    今天的问题是:罗马数字转整数 作为[整 ...

  2. 【算法百题之十八】18年网易面试题,小易买水果

    [算法百题之十八]小易买水果     大家好,我是Lampard~~     很高兴又能和大家见面了,接下来准备系列更新的是算法题,一日一练,早日升仙!     今天的问题是:     小易为了向他的 ...

  3. LeetCode高频题12:整数转罗马数字

    LeetCode高频题12:整数转罗马数字 提示:本题是系列LeetCode的150道高频题,你未来遇到的互联网大厂的笔试和面试考题,基本都是从这上面改编而来的题目 互联网大厂们在公司养了一大批ACM ...

  4. Leetcode算法Java全解答--12. 整数转罗马数字

    Leetcode算法Java全解答–12. 整数转罗马数字 文章目录 Leetcode算法Java全解答--12. 整数转罗马数字 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 ...

  5. # 算法百题斩其一: floodfill

    算法百题斩其一: floodfill 写在前面:何所谓"斩"? 斩,即快速而有力地切断,指我们用最精简的语言,一针见血地点破算法题的核心难点.斩需三思而后行:斩需借助外力.旁征博引 ...

  6. 【算法百题之五】利用两个栈实现一个队列

         [算法百题之五]利用两个栈实现一个队列        大家好,我是Lampard~~        很高兴又能和大家见面了,接下来准备系列更新的是算法题,一日一练,早日升仙!         ...

  7. 算法百题斩其三: 单源最短路与算法——其一

    算法百题斩其三: 单源最短路与算法--其一 写在前面:何所谓"斩"? 斩,即快速而有力地切断,指我们用最精简的语言,一针见血地点破算法题的核心难点.斩需三思而后行:斩需借助外力.旁 ...

  8. 【大厂高频真题100题】《整数转罗马数字》 真题练习第21题 持续更新~

    整数转罗马数字 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符          数值 I             1 V             5 X          ...

  9. 【数据结构与算法】之深入解析“整数转罗马数字”的求解思路与算法示例

    一.题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M: 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ...

最新文章

  1. Perl一行式:文本编解码、替换
  2. python属性_深入理解python对象及属性
  3. “mysql数据库表锁死,既打不开,也关不上”的解决方案
  4. 自动化测试用例设计的原则
  5. Android Content Provider在应用程序之间共享数据的原理分析
  6. python基础——map/reduce
  7. 番薯网让我很不爽的几处设计
  8. python统计学课程_Python数据分析(统计分析)视频课程
  9. 移动互联网草根狂欢:三四线城镇用户价值凸显
  10. C++ 对 C 兼容是什么意思?
  11. 绘制logisitc回归的风险预测值的nomogram图
  12. linux下为命令设置别名
  13. 汽车环视算法原理及其实现
  14. php做网站弊端,PHP 做网站真好用。
  15. VM options常用设置
  16. Python学习 Day43 数据解析-BeautifulSoup 07
  17. Codeforces 1428E Carrots for Rabbits
  18. 跟我学UDS(ISO14229) ———— 0x2C(DynamicallyDefineDataIdentifier)
  19. Micrel的1588方案
  20. 旋转rot和翻转flip

热门文章

  1. Ble Mesh技术(一)之概览
  2. 高考倒计时1天 | 百度数字人“考生”度晓晓将挑战高考作文
  3. 短语、直接短语、句柄、素短语
  4. Vue关于pdf展示问题——第三方电子签章不能正常展示
  5. 红米路由器ac2100怎样设置ipv6_红米(Redmi)路由器AC2100怎么设置
  6. 上个礼拜公司组织去浙江旅游的照片
  7. 计算机的输入输出设备
  8. steps函数--参数意思和用法
  9. linux双系统如何选择顺序,Ubuntu和Windows双系统选择开机顺序
  10. [思语]_一花一世界,一树一菩提