美文网首页
每天一题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