leetcode 12--roman 数字

2018-12-15  本文已影响0人  Ariana不会哭
图片.png

这个题首先要了解罗马数字分配规律:
主要需要讨论的是4+9
4=5-1=IV
9=10-1=IX
随后机智的网友就这样先将roman定义成数组:
char roman[] = { 'M', 'D', 'C', 'L', 'X', 'V', 'I' };
int value[] = { 1000, 500, 100, 50, 10, 5, 1 };

例子:437

  1. 437/100 =4 = CD
  2. 37/10 =3 =XXX
  3. 7/10 =7 =VII


    图片.png

说一下循环思路:
第一层循环:从0-7遍历value,int temp = num / value[i];
值得注意:不需要num/500 或带5 的,所以i=i+2
第二层对temp 结果进行判断:判断很简单给出C++ Java代码

string intToRoman(int num) {
    char roman[] = { 'M', 'D', 'C', 'L', 'X', 'V', 'I' };
    int value[] = { 1000, 500, 100, 50, 10, 5, 1 };
    string ans = "";
    for (int i = 0; i < 7; i = i + 2) {
        int temp = num / value[i];
        if (temp < 4) {
            for (int j = 1; j <= temp; j++)
                ans = ans + roman[i];
        }
        else if (temp == 4) {
            ans = ans + roman[i] + roman[i - 1];
        }
        else if (temp > 4 && temp < 9) {
            ans = ans + roman[i - 1];
            for (int j = 1; j <= temp - 5; j++)
                ans += roman[i];
        }
        else if (temp == 9) {
            ans = ans + roman[i] + roman[i - 2];
        }
        num = num % value[i];
    }
    return ans;
}

JAVA

class Solution {
    public String intToRoman(int num) {
        char roman[] = { 'M', 'D', 'C', 'L', 'X', 'V', 'I' };
        int value[] = { 1000, 500, 100, 50, 10, 5, 1 };
        String ans = "";
        for (int i = 0; i < 7; i = i + 2) {
            int temp = num / value[i];
            if (temp < 4) {
                for (int j = 1; j <= temp; j++)
                    ans = ans + roman[i];
            }
            else if (temp == 4) {
                ans = ans + roman[i] + roman[i - 1];
            }
            else if (temp > 4 && temp < 9) {
                ans = ans + roman[i - 1];
                for (int j = 1; j <= temp - 5; j++)
                    ans += roman[i];
            }
            else if (temp == 9) {
                ans = ans + roman[i] + roman[i - 2];
            }
            num = num % value[i];
        }
        return ans;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读