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

牛牛和罗马数字智力游戏

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param num int整型
     * @param limit int整型
     * @return string字符串
     */
    public String integerToRomanWithReverse (int num, int limit) {
        // write code here
// 罗马字符的二维数组表示
        char[][] romanCharacters = {
            {'M', ' '},
            {'C', 'D'},
            {'X', 'L'},
            {'I', 'V'}
        };

        StringBuilder result = new StringBuilder();
        int magnitude = 1000;
        int romanCharIndex = 0;

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

            // 处理1到3的情况
            if (quotient <= 3) {
                for (int i = 0; i < quotient; i++) {
                    result.append(romanCharacters[romanCharIndex][0]);
                }
            }
            // 处理4的情况
            else if (quotient == 4) {
                result.append(romanCharacters[romanCharIndex][0]);
                result.append(romanCharacters[romanCharIndex][1]);
            }
            // 处理5到8的情况
            else if (quotient <= 8) {
                result.append(romanCharacters[romanCharIndex][1]);
                for (int i = 0; i < quotient - 5; i++) {
                    result.append(romanCharacters[romanCharIndex][0]);
                }
            }
            // 处理9的情况
            else {
                result.append(romanCharacters[romanCharIndex][0]);
                result.append(romanCharacters[romanCharIndex - 1][0]);
            }

            num %= magnitude;
            magnitude /= 10;
            romanCharIndex++;

            // 检查结果长度是否达到限制,如果达到则反转字符串
            if (result.length() >= limit) {
                result.reverse();
            }
        }

        return result.toString();
    }
}

使用的是Java语言。

该题考察的知识点主要是字符串的处理和基本的逻辑控制

将大概解释写到了注释中,在 romanCharacters 二维字符数组中存储了罗马字符的对应关系。每个子数组的第一个元素表示小值字符,第二个元素表示大值字符。使用循环对整数进行逐位转换。在每一次循环中,先计算商(quotient)和余数(num除以magnitude的余数),用于确定当前位上的罗马字符。

根据 quotient 的值,判断当前位上的罗马字符是属于1到3、4、5到8还是9的范围。根据不同情况,构建相应的罗马数字字符串并添加到结果字符串 result 中。

更新整数 nummagnitude 的值,继续处理下一位。

当结果字符串的长度达到限制长度 limit 时,执行字符串反转操作,将结果字符串反转为最终的输出形式。

返回结果字符串。

全部评论

相关推荐

用户64975461947315:这不很正常吗,2个月开实习证明,这个薪资也还算合理,深圳Java好多150不包吃不包住呢,而且也提前和你说了没有转正机会,现在贼多牛马公司骗你说毕业转正,你辛辛苦苦干了半年拿到毕业证,后面和你说没hc了😂
点赞 评论 收藏
分享
刘湘_passion:太强了牛肉哥有被激励到
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务