LeetCode刷题2

in 力扣 with 124 comments

题目描述

罗马数字转整数,包含以下七种字符: I, V, X, L,C,D 和 M。分别对应1,5,10,50,100,500,1000。

给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。

思路
将每一个对应罗马数字转换成数字,一个一个加起来。当小数字在大数字前时,需要减法。
eg:罗马数字IV,就是V-I,即5-1=4,其他正常叠加

难点

数字转换
方法
使用数组,给每一个罗马数字对应下标,每个下标在数组中对应值。
int romanToInt(char * s){
    int num[26];// 优点在于利用ASCII码,数组空间尽可能小,也更能理解
    num['I' - 'A'] = 1;
    num['V' - 'A'] = 5;
    num['X' - 'A'] = 10;
    num['L' - 'A'] = 50;
    num['C' - 'A'] = 100;
    num['D' - 'A'] = 500;
    num['M' - 'A'] = 1000;
    int result = 0, len = strlen(s);
    for(int i = 0; i < len; i++){
        int value = num[s[i] - 'A'];
        if(i < len-1 && value < num[s[i+1] - 'A']){
            result -= value;
        }else{
            result += value;
        }
    }
    return result;
}

java版本(题解中一个很好的思路)

该方法避免了在数字相加时进行判断,直接++
class Solution {
    public int romanToInt(String s) {
        // 优点在于将6种较为特殊的情况提前转化,在switch中进行判断即可,避免了小数字在大数字前的判断,且减少了switch语句判断的次数。
        // 缺点在于当特例足够多时,会变得臃肿,不及+-判断精简
        s = s.replace("IV","a");
        s = s.replace("IX","b");
        s = s.replace("XL","c");
        s = s.replace("XC","d");
        s = s.replace("CD","e");
        s = s.replace("CM","f");

        int result = 0;
        for(int i = 0;i < s.length(); i++){
            result += getValue(s.charAt(i));
        }
        return result;
    }

    private int getValue(char c) {
        switch(c) {
            case 'I' : return 1;
            case 'V' : return 5;
            case 'X' : return 10;
            case 'L' : return 50;
            case 'C' : return 100;
            case 'D' : return 500;
            case 'M' : return 1000;
            case 'a' : return 4;
            case 'b' : return 9;
            case 'c' : return 40;
            case 'd' : return 90;
            case 'e' : return 400;
            case 'f' : return 900;
        }
        return 0;
    }
}

吐槽一下个人代码问题

  1. 习惯于return 0,导致运行结果不符合预期,多return了一个0
  2. 大小写问题,V和v的问题,导致ASCII码变化,计算结果不符合预期
Responses
  1. |Do not strive for perfection in fashion. Nothing in the world is perfect. Also, if you attempt perfection, you may look like you are investing too much time and effort into the process. Some of the most successful fashion models have had at least one flaw, such as a long forehead or a gap between the teeth.

    Reply
  2. stromectol tablets for humans for sale

    Reply
  3. buy generic xalatan online rivastigmine 3mg brand buy exelon 3mg sale

    Reply
  4. buy vasotec online doxazosin 2mg tablet duphalac without prescription

    Reply
  5. generic ferrous sulfate 100 mg buy risedronate pills for sale betapace 40mg generic

    Reply
  6. purchase diltiazem pills diltiazem 180mg over the counter order allopurinol generic

    Reply
  7. I intended to put you that very little remark so as to say thanks again relating to the wonderful ideas you've contributed here. It has been certainly wonderfully generous of people like you in giving extensively exactly what some people would have distributed as an ebook to make some profit for their own end, even more so now that you could have done it if you ever desired. These suggestions as well acted like a good way to be sure that other people have the identical eagerness much like mine to grasp somewhat more on the subject of this condition. I think there are some more pleasant situations in the future for individuals who looked at your site.

    Reply
  8. order lopressor 100mg order metoprolol 50mg pills order medrol for sale

    Reply
  9. I and also my buddies have already been checking out the nice thoughts located on the blog and quickly got a horrible suspicion I had not thanked the site owner for them. Most of the women were absolutely warmed to learn all of them and already have quite simply been loving those things. We appreciate you truly being really accommodating and then for using this sort of tremendous subjects most people are really needing to discover. My personal sincere regret for not expressing gratitude to you earlier.

    Reply
  10. |Buy a lot of basics. Target items that are always in fashion, yet work with other styles as well. A basic black dress or blazer can be worn year after year.

    Reply