扬州市邗江区建设局网站,企业网是什么,搜索量排行,端州网站建设目录
题目#xff1a;
1. 思路
2. 解题方法
3. 复杂度
4. Code 题目#xff1a; 罗马数字包含以下七种字符: I#xff0c; V#xff0c; X#xff0c; L#xff0c;C#xff0c;D 和 M。 字符 数值
I 1
V 5
X 10
L …目录
题目
1. 思路
2. 解题方法
3. 复杂度
4. Code 题目 罗马数字包含以下七种字符: I V X LCD 和 M。 字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000 例如 罗马数字 2 写做 II 即为两个并列的 1 。12 写做 XII 即为 X II 。 27 写做 XXVII, 即为 XX V II 。 通常情况下罗马数字中小的数字在大的数字的右边。但也存在特例例如 4 不写做 IIII而是 IV。数字 1 在数字 5 的左边所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况 I 可以放在 V (5) 和 X (10) 的左边来表示 4 和 9。X 可以放在 L (50) 和 C (100) 的左边来表示 40 和 90。 C 可以放在 D (500) 和 M (1000) 的左边来表示 400 和 900。 给定一个罗马数字将其转换成整数。 示例 1: 输入: s III
输出: 3 示例 2: 输入: s IV
输出: 4 示例 3: 输入: s IX
输出: 9 示例 4: 输入: s LVIII
输出: 58
解释: L 50, V 5, III 3.示例 5: 输入: s MCMXCIV
输出: 1994
解释: M 1000, CM 900, XC 90, IV 4. 提示 1 s.length 15s 仅含字符 (I, V, X, L, C, D, M)题目数据保证 s 是一个有效的罗马数字且表示整数在范围 [1, 3999] 内题目所给测试用例皆符合罗马数字书写规则不会出现跨位等情况。IL 和 IM 这样的例子并不符合题目要求49 应该写作 XLIX999 应该写作 CMXCIX 。关于罗马数字的详尽书写规则可以参考 罗马数字 - Mathematics 。 1. 思路
要将罗马数字转换为整数可以通过遍历罗马数字字符串的每个字符并根据规则逐个累加对应的数值。
2. 解题方法
初始化一个变量 result 用于存储转换后的整数值初始值为 0。遍历罗马数字字符串的每个字符 如果当前字符代表的数值比下一个字符代表的数值小则将当前字符代表的数值加到 result 中并将下一个字符代表的数值减去当前字符代表的数值然后指针向后移动一位。否则将当前字符代表的数值加到 result 中。返回 result。
3. 复杂度
时间复杂度O(n)其中 n 是罗马数字字符串的长度。空间复杂度O(1)只需要常数级别的额外空间。
4. Code
class Solution {public int romanToInt(String s) {int result 0; // 用于存储转换后的整数值// 枚举罗马数字字符串的每个字符for (int i 0; i s.length(); i) {char currentChar s.charAt(i);int currentValue getValue(currentChar); // 获取当前字符代表的数值// 如果当前字符代表的数值比下一个字符代表的数值小则将下一个字符代表的数值减去当前字符代表的数值if (i s.length() - 1 currentValue getValue(s.charAt(i 1))) {result - currentValue;} else {result currentValue;}}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;default:return 0;}}
}这段代码通过遍历罗马数字字符串的每个字符并根据规则逐个累加对应的数值实现了将罗马数字转换为整数的功能。
欢迎大家后台联系讨论。
一份Java面试宝典有兴趣的读者姥爷可以私信我领取免费滴