Leetcode -- Roman to Integer
2015-08-08 11:57
239 查看
题目:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
罗马数字:
‘I’ -- 1, ‘V’ -- 5, ‘X’ -- 10, ‘L‘ -- 50, ’C‘ -- 100, ’D‘ -- 500, ’M‘ -- 1000 。 其中,IV表示4, VI表示6
思路:
采用map方式,建立罗马char与数字的映射。
值得注意的是,在罗马数字里,IV表示4, VI表示6。因此要从后向前遍历,当前一个数比后一个数小,应该在总值上,减去这个值。e.g IV中,V表示5. I表示1. 因为I在V的前面,所以实际表示的数是4.
代码(C++):
int romanToInt(string s) {
map<char, int> map1;
map1['I'] = 1;
map1['V'] = 5;
map1['X'] = 10;
map1['L'] = 50;
map1['C'] = 100;
map1['D'] = 500;
map1['M'] = 1000;
int len = s.length();
int num = 0;
int n;
for(int i = len -1; i>=0; i--)
{
n = map1[s[i]];
if(i < len -1 && n < map1[s[i+1]])
{
num = num - n;
}
else
{
num = num + n;
}
}
return num;
}
PS:C++语法都不懂,用C++刷题,简直是自虐啊!!
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
罗马数字:
‘I’ -- 1, ‘V’ -- 5, ‘X’ -- 10, ‘L‘ -- 50, ’C‘ -- 100, ’D‘ -- 500, ’M‘ -- 1000 。 其中,IV表示4, VI表示6
思路:
采用map方式,建立罗马char与数字的映射。
值得注意的是,在罗马数字里,IV表示4, VI表示6。因此要从后向前遍历,当前一个数比后一个数小,应该在总值上,减去这个值。e.g IV中,V表示5. I表示1. 因为I在V的前面,所以实际表示的数是4.
代码(C++):
int romanToInt(string s) {
map<char, int> map1;
map1['I'] = 1;
map1['V'] = 5;
map1['X'] = 10;
map1['L'] = 50;
map1['C'] = 100;
map1['D'] = 500;
map1['M'] = 1000;
int len = s.length();
int num = 0;
int n;
for(int i = len -1; i>=0; i--)
{
n = map1[s[i]];
if(i < len -1 && n < map1[s[i+1]])
{
num = num - n;
}
else
{
num = num + n;
}
}
return num;
}
PS:C++语法都不懂,用C++刷题,简直是自虐啊!!
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- C++ Custom Control控件向父窗体发送对应的消息
- C++中拷贝构造函数的应用详解