• [Leetcode] Roman to integer 罗马数字转成整数


    Given a roman numeral, convert it to an integer.

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

    思路:有关罗马数字的相关知识可见博客Integer to roman。从左往右遍历字符串,比较当前为和下一位的值,若是当前数字比下一位大,或者当当前数字为最后时,则加上当前数字,否则减去当前数字。这就遇到一个问题,罗马数字的字符串不是按26个字母顺序来的,如何确定大小。解决办法一:写一个函数,将罗马数字转换成整数,然后进行比较;解法二,可以使用map数据结构,将罗马数字的字母转换成对应的整数值。

    方法一的代码如下:

     1 class Solution {
     2 public:
     3     int romanToInt(string s) 
     4     {
     5         int res=0;    //记得初始化
     6         for(int i=0;i<s.size();++i)
     7         {
     8             if(i==s.size()-1||strToNum(s[i])>=strToNum(s[i+1]))
     9                 res+=strToNum(s[i]);
    10             else
    11                 res-=strToNum(s[i]);
    12         }   
    13         return res;
    14     }
    15 
    16     int strToNum(const char c)
    17     {
    18         int num=0;
    19         switch(c)
    20         {
    21             case 'M':
    22                 num=1000;
    23                 break;
    24             case 'D':
    25                 num=500;
    26                 break;
    27             case 'C':
    28                 num=100;
    29                 break;
    30             case 'L':
    31                 num=50;
    32                 break;
    33             case 'X':
    34                 num=10;
    35                 break;
    36             case 'V':
    37                 num=5;
    38                 break;
    39             case 'I':
    40                 num=1;
    41                 break;
    42             default:
    43                 num=0;
    44         }
    45         return num;
    46     }
    47 };

    方法二:

     1 class Solution {
     2 public:
     3     int romanToInt(string s) {
     4         int res = 0;
     5         unordered_map<char, int> m{{'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}};
     6         for (int i = 0; i < s.size(); ++i) 
     7         {
     8             
     9             if (i == s.size() - 1 || m[s[i]] >= m[s[i+1]]) 
    10                 res += m[s[i]];
    11             else 
    12                 res -= m[s[i]];
    13         }
    14         return res;
    15     }
    16 };
  • 相关阅读:
    AcWing 524. 愤怒的小鸟
    AcWing 算法提高课题解目录
    AcWing 292. 炮兵阵地
    AcWing 798. 差分矩阵
    golang 写数据到excel文件 清明
    使用golang开发mqtt服务压力测试工具 清明
    Linux云服务器安装JDK步骤 清明
    shell monitor memory 清明
    自己实现一个Electron跨进程消息组件(兼新书自荐)
    如何把Electron做成一个Runtime,让多个应用共享同一个Electron
  • 原文地址:https://www.cnblogs.com/love-yh/p/7054460.html
Copyright © 2020-2023  润新知