题目描述

题目直接截图于力扣(LeetCode)。

该题网址:https://leetcode-cn.com/problems/roman-to-integer/

用到的知识

  题很简单,貌似没用到什么复杂的算法。

思路

  观察罗马数字的写法,可以得到一个很简单的规律:当前一个数字的值比后一个数字大时,直接将两个数加起来,否则先减去前一个数,然后再加上当前数-前一个数的值...就这样一直到字符串结束,最后返回相加的结果即可。

代码(C)

 1 int getInt(char c) // 获取字符对应的整数
 2 {
 3     int r;
 4     switch(c)
 5     {
 6         case 'I': r = 1; break;
 7         case 'V': r = 5; break;
 8         case 'X': r = 10; break;
 9         case 'L': r = 50; break;
10         case 'C': r = 100; break;
11         case 'D': r = 500; break;
12         case 'M': r = 1000; break; // 给的一般都是符合要求的,不用考虑那些异常情况。
13     }
14     return r;
15 }
16 
17 int romanToInt(char * s){
18     int len = strlen(s); // 获取字符指针的长度,也可以自己写一个函数,但速度会下降一点。
19     if(len == 0)
20     {
21         return 0;
22     }
23     int i;
24     int n;
25     int r = getInt(s[0]);
26     for(i = 1; i < len; i++)
27     {
28         if(getInt(s[i-1]) >= getInt(s[i])) // 判断前一个当前数字和前一个数字那个数字大,如果前一个数字大于其后的数字,直接相加值。
29         {
30             r += getInt(s[i]);
31         }
32         else // 否则先减去前一个数字,然后再加上【当前数字减去前一个数字】的值。
33         {
34             r -= getInt(s[i-1]);
35             n = getInt(s[i]) - getInt(s[i-1]);
36             r += n;
37         }
38     }
39     return r;
40 }

 

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/static-love/p/14281517.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!