Leetcode13 Roman to Integer

题意:

Given a roman numeral, convert it to an integer.

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

分析:

开始准备采用将罗马数字的字符串先划分千位,百位等,但是实际操作起来代码太复杂,而且自己想的逻辑也有问题。

最后采用的方式是从前到后遍历一遍字符即可,加判断来查看字符是不是与前面字符一起组成“小数在大数左边的数字”;

然后依次加数到结果进去即可。

代码:

 1 class Solution {
 2 public:
 3     int romanToInt(string s) {
 4         int result = 0;
 5         for (int i = 0; i < s.size(); ++i) {
 6             if (s[i] == ‘M‘) {
 7                 if (i - 1 >= 0 && s[i-1] == ‘C‘) {
 8                     result += 800;
 9                 }
10                 else {
11                     result += 1000;
12                 }
13             }
14             if (s[i] == ‘D‘) {
15                 if (i - 1 >= 0 && s[i-1] == ‘C‘) {
16                     result += 300;
17                 }
18                 else {
19                     result += 500;
20                 }
21             }
22             if (s[i] == ‘C‘) {
23                 if (i - 1 >= 0 && s[i-1] == ‘X‘) {
24                     result += 80;
25                 }
26                 else {
27                     result += 100;
28                 }
29             }
30             if (s[i] == ‘L‘) {
31                 if (i - 1 >= 0 && s[i-1] == ‘X‘) {
32                     result += 30;
33                 }
34                 else {
35                     result += 50;
36                 }
37             }
38             if (s[i] == ‘X‘) {
39                 if (i - 1 >= 0 && s[i-1] == ‘I‘) {
40                     result += 8;
41                 }
42                 else {
43                     result += 10;
44                 }
45             }
46             if (s[i] == ‘V‘) {
47                 if (i - 1 >= 0 && s[i-1] == ‘I‘) {
48                     result += 3;
49                 }
50                 else {
51                     result += 5;
52                 }
53             }
54             if (s[i] == ‘I‘){
55                 result += 1;
56             }
57         }
58         return result;
59     }
60 };
时间: 2024-10-10 23:46:55

Leetcode13 Roman to Integer的相关文章

LeetCode13——Roman to Integer

Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. 题目大意 给你个罗马数字,把它转换成一个int数.输入限定在[1, 3999]. 难度系数:容易 实现 一次性通过,:) int getVal(char a) { switch (a) { case 'I': return 1; case 'V': return 5; case 'X

LeetCode13 Roman to Integer 罗马转为数字

题目: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. 翻译:把罗马转为数字 思路:如果是单纯的一个罗马字母比较好处理,但是对于4,9这样的,应该看它下一个字符代表的数字是不是比他大,要是大的话减去当前的字符代表的数字.要是小的话,则加上这个数字. 像IV ,代表4.当读到I的时候,应该判断下一个字符V和I的关系,V比I代表的数字

19.1.26 [LeetCode13]Roman to Integer

Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000 For example, two is written as II in Roman numeral, just two one's added together. Twelve is written as, XII, which i

LeetCode 013 Roman to Integer

[题目] Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. [题意] 把罗马数转换为整数 [思路] 罗马数字中只使用如下七个基值字母:M,D,C,L,X,V,I,分别用来表示1000.500.100.50.10.5.1. 大体思路是每个罗马字母对应的值相加即可, 但需要处理900, 400, 90, 40, 9, 4这几个特殊值(左

leetCode 13. Roman to Integer 字符串

13. 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(1),V(5),X(10),L(50),C(100),D(500),M(1000).按照下面的规则可以表示任意正整数. 重复数次:一个罗马数字重复几次,就表示这个数的几倍. 右加左减:在一个较大的罗马数

Roman to Integer——罗马数字转变算法

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41486885 通过本文你可能学到的知识如下: (1)理解本题的解题思路,在以后类似的场景中,如果没有想到比较好的方法,可以考虑使用本文的方法,虽然效率不是特别高. (2)能够对字符串的截取和HashMap相关操作有所学习. Roman to Integer Given a roman numeral, convert it to an integer. I

LeetCode之Integer to Roman, Roman to Integer

罗马数字以前只接触过I到VIII,第一次听说罗马数字也可以表示大于8的数字.阿拉伯数字和罗马数字之间的转换最重的是了解罗马数字的规则.Wiki了一把,又参考了其它的文档,总结如下: 罗马数字规则: 1, 罗马数字共有7个,即I(1).V(5).X(10).L(50).C(100).D(500)和M(1000). 罗马数字中没有"0". 2, 重复次数:一个罗马数字最多重复3次. 3, 右加左减: 在较大的罗马数字的右边记上较小的罗马数字,表示大数字加小数字. 在较大的罗马数字的左边记上

【leetcode】Roman to Integer

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 V X L C D M 阿拉伯数字 1 5 10 50 100 500 1000 计数规则: 相同的数字连写,所表示的数等于这些数字相加得到的数,例如:III = 3 小的数字在大的数字右边,所表示的数等于这些数字

Leetcode | Roman to Integer &amp; Integer to Roman

Roman to Integer Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. 搜了一下,才知道这道题可以写这么简洁. 1 class Solution { 2 public: 3 int romanToInt(string s) { 4 if (s.empty()) return 0; 5 int dict[100]; 6 d