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 / Cancel Reply
  1. naprosyn oral oral naprosyn 500mg purchase prevacid without prescription

    Reply
  2. A lot of thanks for all of your labor on this site. My mom enjoys engaging in internet research and it's easy to see why. All of us notice all about the lively tactic you offer both interesting and useful tactics by means of this website and improve contribution from website visitors on the article so our daughter has always been understanding so much. Have fun with the remaining portion of the new year. Your conducting a tremendous job.

    Reply
  3. I truly wanted to compose a simple message so as to appreciate you for some of the awesome recommendations you are placing at this site. My time consuming internet search has at the end been compensated with high-quality ideas to talk about with my neighbours. I 'd state that that most of us visitors actually are very much fortunate to live in a fantastic community with very many outstanding professionals with useful opinions. I feel very fortunate to have come across the web pages and look forward to some more enjoyable minutes reading here. Thanks once more for a lot of things.

    Reply
  4. cheap digoxin order molnunat 200mg online molnupiravir 200 mg oral

    Reply
  5. |Create a look that is specific to you. Truly original fashion comes from people who make their own style, not those who follow the trends. You, of course, need a certain personality to be comfortable doing this, but once you take the leap, you will surely enjoy the many compliments for being unique.

    Reply
  6. |A fabulous handbag can spruce up any outfit, but match it up with other bags you may also need to carry. For example, if you carry a briefcase, coordinate your handbag with your briefcase. You should only ever have a maximum of two bags on you at the same time.

    Reply
  7. Thank you so much for providing individuals with remarkably spectacular opportunity to read from this blog. It's always so nice plus full of a good time for me personally and my office colleagues to visit your blog at the very least three times a week to read the latest secrets you will have. And definitely, I am actually fulfilled with the unique methods you give. Selected 4 facts in this posting are easily the most suitable I've had.

    Reply
  8. buy carvedilol 25mg generic buy cheap carvedilol aralen 250mg cost

    Reply
  9. acetazolamide 250 mg tablet azathioprine 50mg ca purchase imuran for sale

    Reply
  10. I have to convey my respect for your generosity in support of persons that must have guidance on the question. Your special commitment to passing the message along turned out to be pretty valuable and have specifically made most people much like me to get to their endeavors. Your amazing informative suggestions means a lot a person like me and substantially more to my office colleagues. Regards; from each one of us.

    Reply