码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode:Roman to Integer

时间:2014-09-11 22:07:42      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   使用   ar   for   art   

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
  
  计数规则:
  1. 相同的数字连写,所表示的数等于这些数字相加得到的数,例如:III = 3
  2. 小的数字在大的数字右边,所表示的数等于这些数字相加得到的数,例如:VIII = 8
  3. 小的数字,限于(I、X和C)在大的数字左边,所表示的数等于大数减去小数所得的数,例如:IV = 4
  4. 正常使用时,连续的数字重复不得超过三次
  5. 在一个数的上面画横线,表示这个数扩大1000倍(本题只考虑3999以内的数,所以用不到这条规则)

  思路:从前向后遍历,当前数字比后一个数字大则加入总和,当前数字(I,X,C)比后一个数字小则从总和中减去该数字。

本文参考了:http://blog.csdn.net/wzy_1988/article/details/17057929

 

 

 1 class Solution {
 2     public:
 3         int romanToInt(string s) {
 4             int str[26];
 5             str[I-A]=1;
 6             str[V-A]=5;
 7             str[X-A]=10;
 8             str[L-A]=50;
 9             str[C-A]=100;
10             str[D-A]=500;
11             str[M-A]=1000;
12             int sum=0,n=s.size();
13             s.push_back(s[n-1]);
14             for(int i=0;i<n;i++)
15             {
16                 if(str[s[i]-A]>=str[s[i+1]-A])
17                     sum+=str[s[i]-A];
18                 else if(s[i]==I||s[i]==X||s[i]==C)
19                     sum-=str[s[i]-A];
20             }
21             return sum;
22         }
23 };

 

LeetCode:Roman to Integer

标签:style   blog   http   color   io   使用   ar   for   art   

原文地址:http://www.cnblogs.com/levicode/p/3967214.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!