首页 > 其他分享 >LeetCode 13[罗马数字转整数]

LeetCode 13[罗马数字转整数]

时间:2024-11-11 11:46:53浏览次数:1  
标签:case 13 ++ iRet 元素 罗马字 break 罗马数字 LeetCode

题目

链接

LeetCode 13[罗马数字转整数]

详情

实例

提示

题解

思路

遍历罗马字符串

如果元素是除了 'I'、'X'、'C' 以外的罗马字,即是 'V'、'L'、'D'、'M' 等元素,则直接加上罗马字对应的整型数字

如果元素是 'I' 则分以下几种情况:

  1. 此元素为最后一个元素,则直接加上罗马字对应的整型数字
  2. 此元素不是最后一个元素
    1. 如果下一个字符是罗马字 'V',则加上4
    2. 如果下一个字符是罗马字 'X',则加上9
    3. 如果下一个字符既不是罗马字 'V' 也不是罗马字 'X',则加上1

如果元素是 'X' 则分以下几种情况:

  1. 此元素为最后一个元素,则直接加上罗马字对应的整型数字
  2. 此元素不是最后一个元素
    1. 如果下一个字符是罗马字 'L',则加上40
    2. 如果下一个字符是罗马字 'C',则加上90
    3. 如果下一个字符既不是罗马字 'L' 也不是罗马字 'C',则加上10

如果元素是 'C' 则分以下几种情况:

  1. 此元素为最后一个元素,则直接加上罗马字对应的整型数字
  2. 此元素不是最后一个元素
    1. 如果下一个字符是罗马字 'D',则加上400
    2. 如果下一个字符是罗马字 'M',则加上900
    3. 如果下一个字符既不是罗马字 'D' 也不是罗马字 'M',则加上100

代码

class Solution {
public:
    int romanToInt(string s) {
        int iSize = s.size();
        int iRet = 0;

        for (int i = 0; i < iSize; i++)
        {
            switch (s.at(i))
            {
                case 'I':
                    if (i < iSize - 1)
                    {
                        if ('V' == s.at(i + 1))
                        {
                            iRet += 4;
                            i++;
                            break;
                        }

                        if ('X' == s.at(i + 1))
                        {
                            iRet += 9;
                            i++;
                            break;
                        }
                    }                
                    iRet += 1;
                    break;
                case 'V':
                    iRet += 5;
                    break;
                case 'X':
                    if (i < iSize - 1)
                    {
                        if ('L' == s.at(i + 1))
                        {
                            iRet += 40;
                            i++;
                            break;
                        }

                        if ('C' == s.at(i + 1))
                        {
                            iRet += 90;
                            i++;
                            break;
                        }
                    }                
                    iRet += 10;
                    break;
                case 'L':
                    iRet += 50;
                    break;
                case 'C':
                    if (i < iSize - 1)
                    {
                        if ('D' == s.at(i + 1))
                        {
                            iRet += 400;
                            i++;
                            break;
                        }

                        if ('M' == s.at(i + 1))
                        {
                            iRet += 900;
                            i++;
                            break;
                        }
                    }                
                    iRet += 100;
                    break;
                case 'D':
                    iRet += 500;
                    break;
                case 'M':
                    iRet += 1000;
                    break;
                default:break;
            }
        }

        return iRet;
    }
};

标签:case,13,++,iRet,元素,罗马字,break,罗马数字,LeetCode
From: https://www.cnblogs.com/EricsT/p/18539416

相关文章

  • 实验13:享元模式
    本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解享元模式的动机,掌握该模式的结构;2、能够利用享元模式解决实际问题。 [实验任务一]:围棋设计一个围棋软件,在系统中只存在一个白棋对象和一个黑棋对象,但是它们可以在棋盘的不同位置显示多次。实验要求:1.提交类......
  • CF 1365 题解
    CF1365题解APrimeSubtraction任何数的因数中都会有质数,除非他是\(1\).因此原题不合法当且仅当\(b-a=1\).BKill'EmAll首先,答案有明确的下界:最右面的怪兽一定要处理.不断模拟去杀掉当前最靠右的怪兽,得到的答案就是答案的下界.是否能取到下界呢?答案是肯定......
  • 实验13:享元模式
    [实验任务一]:围棋设计一个围棋软件,在系统中只存在一个白棋对象和一个黑棋对象,但是它们可以在棋盘的不同位置显示多次。实验要求:1.提交类图;2.提交源代码;3.注意编程规范;4.要求用简单工厂模式和单例模式实现享元工厂类的设计。1.类图 2.源代码Coordinates.javapackage......
  • 「杂题乱刷2」CF1354E
    题目链接CF1354EGraphColoring(*2100)解题思路发现这个东西就是类似于二分图染色的东西。因为\(2\)只能和\(1,3\)链接。其余种类的点都不能连接。不妨把\(1,3\)都看成同一个点放到最后处理。那么我们就相当于是要找到一种方案使得选择每个联通快的黑点或白点,使得最......
  • 考研打卡(13)
    开局(13)开始时间 2024-11-10 21:56:51结束时间 2024-11-10 22:48:52今天去了河北经贸大学回来还打了剧本杀数据结构下列说法错误的事____(中国科学技术大学)A只有在线性表的初始状态为反序的情况下,冒泡排序过程中元素的移动次数才会达到最大值B只有在线性表的初始状......
  • 「杂题乱刷2」CF1370F2
    题目链接CF1370F2TheHiddenPair(HardVersion)(*2700)题目描述真的很难吗?我们首先考虑找出第一个特殊点。我们可以先求出这两个点路径中的任意一个点。发现询问\(1\simn\)就使我们需要的询问、接下来以这个路径中的一个点为根来确定每个节点的深度。接下来考虑二......
  • (代码随想录)132. 分割回文串 II(动态规划)
    132.分割回文串II这一题直接将我打回cv工程师的原型除了dp还要定义一个辅助数组,用于表示i区间到j区间是否为回文串. 动规五部曲1.确定dp含义dp[i]表示0到i之间的字符串需要切割的最小次数2.确定递推公式第一种就是0到i之间直接就是一个回文串,那么直接dp[i]=0......
  • (代码随想录)leetcode300. 最长递增子序列
    自己还是写不出来[笑哭]思路错了,自己死要去只遍历一遍代码随想录答案:classSolution{public:intlengthOfLIS(vector<int>&nums){if(nums.size()<=1)returnnums.size();vector<int>dp(nums.size(),1);//所有元素都是1长度//dp[i]......
  • 并查集 How many tables(hdu 1213) How many answers are wrong(hdu 3038)
    目录前言并查集  并查集的初始化  并查集的合并  并查集合并的优化,路径压缩Howmanytables(hdu1213)  问题描述  输入  输出问题分析代码带权并查集Howmanyanswersarewrong(hdu3038)  问题描述  输入  输出问题分析代码......
  • 2024-2025-1 学号20241306 《计算机基础与程序设计》第7周学习总结
    2024-2025-1学号20241306《计算机基础与程序设计》第7周学习总结作业信息这个作业属于哪个课程<班级的链接>2024-2025-1-计算机基础与程序设计这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标了解学习数组与链......