Leetcode:integer_to_roman
一、 题目
将给定的数字(阿拉伯数字)转化成罗马数字。
数字不会大于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:JAVA
class 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();
}
};
Leetcode:integer_to_roman的更多相关文章
- 我为什么要写LeetCode的博客?
# 增强学习成果 有一个研究成果,在学习中传授他人知识和讨论是最高效的做法,而看书则是最低效的做法(具体研究成果没找到地址).我写LeetCode博客主要目的是增强学习成果.当然,我也想出名,然而不知 ...
- LeetCode All in One 题目讲解汇总(持续更新中...)
终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...
- [LeetCode] Longest Substring with At Least K Repeating Characters 至少有K个重复字符的最长子字符串
Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...
- Leetcode 笔记 113 - Path Sum II
题目链接:Path Sum II | LeetCode OJ Given a binary tree and a sum, find all root-to-leaf paths where each ...
- Leetcode 笔记 112 - Path Sum
题目链接:Path Sum | LeetCode OJ Given a binary tree and a sum, determine if the tree has a root-to-leaf ...
- Leetcode 笔记 110 - Balanced Binary Tree
题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...
- Leetcode 笔记 100 - Same Tree
题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...
- Leetcode 笔记 99 - Recover Binary Search Tree
题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...
- Leetcode 笔记 98 - Validate Binary Search Tree
题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...
随机推荐
- USACO1.3.2修理牛棚
在学习一段时间贪心并写了一些贪心题之后,又一次看到了农夫和牛幸福美满的生活故事(雾).嘛,闲话少说,上题目 在一个暴风雨的夜晚,农民约翰的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满 ...
- Codeforces #447 Div2 D
#447 Div2 D 题意 给一棵完全二叉树,每条边有权值为两点间的距离,每次询问 \(x, h\) ,从结点 \(x\) 出发到某一结点的最短路的距离 \(d\) 如果小于 \(h\) ,则答案加 ...
- 洛谷——P2758 编辑距离
P2758 编辑距离 题目描述 设A和B是两个字符串.我们要用最少的字符操作次数,将字符串A转换为字符串B.这里所说的字符操作共有三种: 1.删除一个字符: 2.插入一个字符: 3.将一个字符改为另一 ...
- Hibernate4 No Session found for current thread
Hibernate4 与 spring3 集成之后, 如果在取得session 的地方使用了getCurrentSession, 可能会报一个错:“No Session found for curre ...
- Exercise01_11
public class Population{ public static void main(String[] args){ int sum,s; s=365*5*24*60*60; sum=31 ...
- 在GIT中修改提交记录
在SVN中,提交记录是无法修改的.比如说,当我们提交了某次修改后,发现该次提交中有错误时,只能将将补丁再次提交一遍.这样,就存在两次提交记录,没有保证提交的原子性. 在GIT中,由于提交是在本地进行的 ...
- 让IE浏览器支持HTML5
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- YUV12(420) (from)to RGB24
直接上代码 #include <opencv2/opencv.hpp> #include <stdio.h> #define min(a,b) ((a<b)?a:b) # ...
- python抓取日本网站上iphone5的价格
抓取日本网站上iphone5的价格,比国内便宜好多汇率换算是在中国银行的网站上取得 #-*- coding:utf-8 -*- import requests import time from bs4 ...
- vmware已经全面支持open-vm-tools
以后不用再为vmware vm单独安装vmware-tools了,vmware已经全面支持open-vm-tools, 今天突然发现安装vmware-tools时出现deprecated提示,原来vm ...