题解 | #牛牛和罗马数字智力游戏# 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
中。
更新整数 num
和 magnitude
的值,继续处理下一位。
当结果字符串的长度达到限制长度 limit
时,执行字符串反转操作,将结果字符串反转为最终的输出形式。
返回结果字符串。