资讯专栏INFORMATION COLUMN

leetcode从罗马数字开始

LiveVideoStack / 1149人阅读

摘要:将罗马数字转化为十进制数字上的一道简单级别的题目将罗马数字转化为对应的十进制数字,其中罗马数字的范围在这题的关键在于了解需求,及如何将罗马数字转化为对应的十进制数字罗马数字转化为十进制数字的规则为用作数字的罗马字母共有七个,即相同的数字连写

将罗马数字转化为十进制数字

Leetcode上的一道简单级别的题目
将罗马数字转化为对应的十进制数字,其中罗马数字的范围在1~3999

这题的关键在于了解需求,及如何将罗马数字转化为对应的十进制数字

罗马数字转化为十进制数字的规则为:

用作数字的罗马字母共有七个,即Ⅰ(1),Ⅴ(5),Ⅹ(10),L(50),C(100),D(500),M(1000).

相同的数字连写,所表示的数等于这些数相加

如果大的数字在前,小的数字在后,所表示的数等于这些数相加 如:VIII = 8,

如果小的数字在前,大的数字在后,所表示的数等于从大数减去小数。如:IX = 9

我的解答中使用了类似于链表的方法
创建两个变量current和next分别表示当前节点和下一个节点,当当前节点和下一个节点的值不同时,则将当前temp中的值根据比较结果添加至result,并赋值temp为下一个节点的值,否则将值累加至temp
为了比较方便,我在输入的string最后添加了一个‘O’其对应的值为0

/**
 * @author rale
 *
 *Given a roman numeral, convert it to an integer.
 *Input is guaranteed to be within the range from 1 to 3999.
 *
 */
public class RomanToInteger {
    public int romanToInt(String s) {
        //将两个if判断删去后测试得到的结果性能更好 可能和测试用例有关
        if(s==null || s.equals("")){
            return 0;
        }
        if(s.length()==1){
            return singleRomanToInt(s.charAt(0));
        }
        s += "O";
        int result = 0;
        char[] romanChars = s.toCharArray();
        char current = romanChars[0];
        char next = romanChars[1];
        int temp = singleRomanToInt(current);
        for(int i = 0 ; inextInt){
                result += temp;
                temp = nextInt;
            }
        }
        return result;
    }
    
    //将单个罗马字母转化为对应的数字
    private int singleRomanToInt(char s){
        int result = 0;
        switch(s){
        case "I" : 
            result = 1;
            break;
        case "V" :
            result = 5;
            break;
        case "X" :
            result = 10;
            break;
        case "L" :
            result = 50;
            break;
        case "C" :
            result = 100;
            break;
        case "D" :
            result = 500;
            break;
        case "M" :
            result = 1000;
            break;
        default :
            result = 0;
            break;
        }
    return result;
    }
    
    
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66840.html

相关文章

  • leetcode刷题:283.Move Zeroes(Easy)

    摘要:解法目的就是把一个数组中所有为的数移动到数组的尾部,并保证其他元素相对位置不变。要求是在原数组上修改,不要额外引入其他的数组尽量减少操作次数。在小游戏中,设置了和界面一致的二维数组,数组的每一位记录了一个数字。 地址:https://leetcode.com/problems/move-zeroes/ 应用场景说明 这个题是很Easy的一道题,它的应用场景是在我尝试写小游戏2048时,...

    ckllj 评论0 收藏0
  • leetcode 一些算法题目记录

    摘要:题目全部用做的,基本上每天一题的节奏。题目这里记录自己对一些题目的思路和想法数字回文,说不能用额外的空间一下子懵逼了,第一概念就是换成字符串比较,但是感觉这样子做就没有意义了。找出任意两条线段与轴组成的木桶,可以盛水最大的值。 前言 showImg(https://segmentfault.com/img/bVT2JE?w=1992&h=1310); 原文地址 无意间发现 LeetCo...

    mayaohua 评论0 收藏0
  • leetcode390.Elimination Game

    摘要:题目要求假设有一共个数字,从左往右开始每隔一位删除一个数字,到达最右侧后,再从右往左每隔一位删除一个数字,如此反复,直到剩下最后一个数字。由此可见,假如我们定义一个递归函数我们可以有来获取结果。 题目要求 There is a list of sorted integers from 1 to n. Starting from left to right, remove the fir...

    Godtoy 评论0 收藏0
  • [Leetcode] Find the Duplicate Number 找到重复数字

    摘要:暴力法复杂度时间空间思路如果不用空间的话,最直接的方法就是选择一个数,然后再遍历整个数组看是否有跟这个数相同的数就行了。二分法复杂度时间空间思路实际上,我们可以根据抽屉原理简化刚才的暴力法。 Find the Duplicate Number Given an array nums containing n + 1 integers where each integer is bet...

    chnmagnus 评论0 收藏0
  • 程序员进阶之算法练习:LeetCode专场

    摘要:例如题目解析题目的意思很明显,就是把两个数字加起来,需要考虑进位的情况。总结这个题目如果都能独立完成,那么水平已经可以足以应付国内各大企业的算法面。 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由落影发表 前言 LeetCode上的题目是大公司面试常见的算法题,今天的目标是拿下5道算法题: 题目1是基于链表的大数加法,既考察基本数据结构的了解,又考察在处理加法过程中...

    MrZONT 评论0 收藏0

发表评论

0条评论

LiveVideoStack

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<