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. }{Don't follow a trend just because it's "in." What looks amazing for a runway model might not look great on you. Follow your tastes, not whatever flavor is popular in the most recent fashion magazine. You are going to want to go with your gut on this. You won't be led down the wrong path.

    Reply
  2. |Avoid any horizontal stripes if your weight is higher. This pattern makes you look wider and is completely unflattering. Instead, wear clothing with vertical patterns, which will draw attention to height rather than girth.

    Reply
  3. |After Labor Day, it is perfectly fine to wear white! White is one of the most neutral, most flattering colors out there, and you should always think about including some white in your outfit. If white is your color, put it on. Few can find fault with a fabulously dressed, confident woman, no matter what color she's wearing.

    Reply
  4. Affordable options like hoes for cheap Jordans allow you to express your individuality without breaking the bank.

    Reply
  5. |Don't buy something simply because of a great price. No matter how much of a steal it is money wise, if it looks bad on you, don't buy it. It will simply be a loss of space and money.

    Reply
  6. |Sheer clothes are a good option, but only limited to certain types of events. Wearing clothing items that are sheer in private areas can make you appear trashy rather than classy.

    Reply
  7. |There are hundreds of thousands of hair accessory possibilities. You can choose from lots of options, including headbands, scrunchies, bows, barrettes and extensions. Include various hair accessories for practical and aesthetic purposes. The right hair accessory can set off an entire outfit. When you are going out on the town, choose a headband that compliments your outfit.

    Reply
  8. |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
  9. }{Create a unique fashion style of your own. Try to be as unique as possible, so that you do not blend in with the crowd. It is up to individuals sometimes to create a style that people can appreciate and that others will follow.

    Reply
  10. }In the past, you might have believed you could not get into the fashion world. Hopefully, you've just learned all kinds of neat things. Use these tips to master fashion.

    Reply