博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode:integer_to_roman
阅读量:5812 次
发布时间:2019-06-18

本文共 2528 字,大约阅读时间需要 8 分钟。

一、     题目

   将给定的数字(阿拉伯数字)转化成罗马数字。

数字不会大于3999

二、     分析

   首先我们要知道神马是罗马数字,尽管听说过。但事实上我还真没有记住,于是就google了下,具体见下:

个位数举例

I, 1 】II, 2】 III, 3】 IV, 4 】V, 5 】VI, 6】 VII, 7】 VIII,8 】IX, 9

十位数举例

  X, 10】 XI, 11 】XII, 12】 XIII, 13】 XIV, 14】 XV, 15 】XVI, 16 】XVII, 17 】XVIII, 18】 XIX, 19】 XX, 20】  XXI, 21 】XXII, 22 】XXIX, 29】 XXX, 30】 XXXIV, 34】 XXXV, 35 】XXXIX, 39】 XL, 40】 L, 50 】LI, 51】 LV, 55】 LX, 60】 LXV, 65】 LXXX, 80】 XC, 90 】XCIII, 93】 XCV, 95 】XCVIII, 98】 XCIX, 99 】

百位数举例

C, 100】 CC, 200 】CCC, 300 】CD, 400】 D, 500 】DC,600 】DCC, 700】 DCCC, 800 】CM, 900】 CMXCIX,999】

千位数举例

M, 1000】 MC, 1100 】MCD, 1400 】MD, 1500 】MDC, 1600 】MDCLXVI, 1666】MDCCCLXXXVIII, 1888 】MDCCCXCIX, 1899 】MCM, 1900 】MCMLXXVI,1976】 MCMLXXXIV, 1984】 MCMXC, 1990 】MM, 2000 】MMMCMXCIX, 3999】

正好有我们要求的最大数。

      于是我们能够想到,我们仅仅须要将数字与上面的数字相应就可以。

1.     首先。我们要先确定高位即千位的数字,即推断到底是1000还是2000还是3000。于是能够想到每次将num减去1000。并加上一个”M”。

2.     然后,我们推断百位的数字。即能够用num/100来得到百位的数字

3.     再次就是十位和个位,同2的做法

将每个位的字母从左到右连接在一起即构成了我们的结果。

另外,在CSDN上看到一个童鞋的方法非常好

I = 1;

V = 5;

X = 10;

L = 50;

C = 100;

D = 500;

M = 1000;

当中每两个阶段的之间有一个减法的表示,比方900=CM, C写在M前面表示M-C。范围给到3999,情况不多直接打表事实上更快。用代码推断表示预计比較繁琐。

然后就是贪心的做法,每次选择能表示的最大值,把相应的字符串连起来。

class Solution {public:    string intToRoman(int num) {        string str;		char *hu[] = {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};		char *te[] = {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};		char *on[] = {"","I","II","III","IV","V","VI","VII","VIII","IX"};				while(num>=1000) {			str+="M";			num-=1000;		}		str += hu[num/100];		num=num%100;		str += te[num/10];		num=num%10;		str+=on[num];		return str;     }};法2:class Solution {public:    string intToRoman(int num) {        string str;          string symbol[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};          int value[]=    {1000,900,500,400, 100, 90,  50, 40,  10, 9,   5,  4,   1};         for(int i=0;num!=0;++i)        {            while(num>=value[i])            {                num-=value[i];                str+=symbol[i];            }        }        return str;    }}; 法3:JAVAclass Solution {public:    string intToRoman(int num) {        int[] values = {1000, 900, 500, 400, 100,90, 50, 40, 10, 9, 5, 4, 1 };        String[] numerals = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };        StringBuilder result = new StringBuilder();        for (int i = 0; i < values.length; i++) {            while (number >= values[i]) {                number -= values[i];                result.append(numerals[i]);            }        }        return result.toString();    }};

转载地址:http://glvbx.baihongyu.com/

你可能感兴趣的文章
Vmware Workstation 安装Oracle Solaris 10
查看>>
《统一沟通-微软-实战》-7-配置-1-电话拨入式会议
查看>>
MySQL 5.7.17 Group Replication搭建
查看>>
手把手教你跑Larave框架实战笔记系列之二
查看>>
hibernateTools工具安装及使用总结(eclipse 3.6)
查看>>
Hyper-v学习(二),虚拟机实时迁移之Kerbors
查看>>
linux 环境下安装mysql----ubuntu
查看>>
LAMP configuration after ubuntu16installation
查看>>
linux 常用基础命令 tar 详细介绍
查看>>
Linux系统/boot目录破损无法启动怎么办
查看>>
网络执法官简介
查看>>
python tempfile
查看>>
乔布斯的死亡真相,24岁已患×××
查看>>
nslookup命令用法
查看>>
安全站点收集
查看>>
像找恋人一样找报表软件
查看>>
我的友情链接
查看>>
css学习笔记清除浮动
查看>>
阿里云CENTOS6.9安装pptpd服务
查看>>
了解GeoJson
查看>>