美文网首页
每天一题LeetCode【第10天】

每天一题LeetCode【第10天】

作者: 草稿纸反面 | 来源:发表于2017-01-30 00:00 被阅读152次

    T13. Roman to Integer【Easy

    题目

    给一个罗马数字,将其转换为整数。

    输入范围:1~3999

    思路

    ① 了解罗马字的规则

    ② 了解switch用法

    ③ 看代码就好,写了一些注释应该没什么难度的

    代码

    代码取自 Top Solution,稍作注释

    这是一段很容易理解的代码~

    public class Solution {
     public int romanToInt(String s) {
        int nums[]=new int[s.length()];
        for(int i=0;i<s.length();i++){
            //s.charAt(i)指得到第i+1个字符
            switch (s.charAt(i)){
            //通过case得到字符对应的数字,并存入nums数组中
                case 'M':
                    nums[i]=1000;
                    break;
                case 'D':
                    nums[i]=500;
                    break;
                case 'C':
                    nums[i]=100;
                    break;
                case 'L':
                    nums[i]=50;
                    break;
                case 'X' :
                    nums[i]=10;
                    break;
                case 'V':
                    nums[i]=5;
                    break;
                case 'I':
                    nums[i]=1;
                    break;
            }
        }
        int sum=0;
        for(int i=0;i<nums.length-1;i++){
           /*关键!罗马字的规则是低级字符在高级字符(设V比I高级这样)
            *左边的是减,右边是加,所以这样比较就是左和右边比字符是
            *否高级(越大越高级),然后根据规则加减
            */     
            if(nums[i]<nums[i+1])
                sum-=nums[i];
            else
                sum+=nums[i];
        }
        return sum+nums[nums.length-1];
    }
    

    补充

    前一篇文章写得是整数转罗马字,可以一起看看~

    然后就补充一下罗马字符好啦~主要是方便大家找,下面是链接:

    维基百科

    百度百科

    相关文章

      网友评论

          本文标题:每天一题LeetCode【第10天】

          本文链接:https://www.haomeiwen.com/subject/xcocittx.html