题解 | #牛牛和罗马数字智力游戏#

牛牛和罗马数字智力游戏

https://www.nowcoder.com/practice/7f4bd3b2d7d34f5c87d84120d9782c1d

考察的知识点:哈希;

解答方法分析:

  1. roman_characters保存了罗马数字字符的对应关系。数组的每一行表示一个数字位上对应的字符,第一列表示该数字位上的普通字符,第二列表示该数字位的特殊字符。
  2. 通过循环将整数num从高位到低位进行处理。在每一循环中,首先计算整数num除以当前数位的进位值magnitude,得到商quotient。根据商的不同取值,将罗马数字字符添加到结果字符串result中。
  3. 如果商小于等于3,将普通字符连续添加quotient次;如果商等于4,添加一个普通字符和一个特殊字符;如果商大于等于5且小于等于8,先添加一个特殊字符,再连续添加商减去5次普通字符;如果商等于9,添加一个普通字符和一个上一个数位上的普通字符。
  4. 接下来,将num取余magnitude,更新magnitude为下一个数位的进位值。同时,更新roman_char_index为下一个数位的索引。如果结果字符串result的长度达到了限制长度limit,则将结果字符串进行反转。
  5. 最后,返回结果字符串result

所用编程语言:C++;

完整编程代码:↓

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param num int整型
     * @param limit int整型
     * @return string字符串
     */
    string integerToRomanWithReverse(int num, int limit) {
        string roman_characters[4][2] = {
            {"M", ""},
            {"C", "D"},
            {"X", "L"},
            {"I", "V"},
        };

        string result = "";
        int magnitude = 1000;
        int roman_char_index = 0;

        while (num > 0) {
            int quotient = num / magnitude;

            if (quotient <= 3) {
                result += string(quotient, roman_characters[roman_char_index][0][0]);
            } else if (quotient == 4) {
                result += roman_characters[roman_char_index][0] +
                          roman_characters[roman_char_index][1];
            } else if (quotient <= 8) {
                result += roman_characters[roman_char_index][1] + string(quotient - 5,
                          roman_characters[roman_char_index][0][0]);
            } else {
                result += roman_characters[roman_char_index][0] +
                          roman_characters[roman_char_index - 1][0];
            }

            num %= magnitude;
            magnitude /= 10;
            roman_char_index++;
            if (result.length() >= limit) {
                reverse(result.begin(), result.end());
            }
        }
        return result;
    }
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务