平台网站开发可行性分析,html网站怎么做,网站建设和注册,学校校园网站建设方案力扣#xff08;LeetCode#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试#xff1f;力扣提供海量技术面试资源#xff0c;帮助你高效提升编程技能#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/roman-to-integer/description/ … 力扣LeetCode官网 - 全球极客挚爱的技术成长平台备战技术面试力扣提供海量技术面试资源帮助你高效提升编程技能轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/roman-to-integer/description/
罗马数字包含以下七种字符: 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. 自己的思路
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
根据上面每个字符都对应一个数值我首先想到的是HashMap使用HashMap进行存储key,value其中key为字符value为数值。
然后将字符串s转化为char数组使用for循环遍历。
注意以下三种特殊的情况即可。这里我使用的是减去多加的例如IV本应该减去I的“1”前面不管直接加上所以后面需要减去两份的“1”。
I 可以放在 V (5) 和 X (10) 的左边来表示 4 和 9。X 可以放在 L (50) 和 C (100) 的左边来表示 40 和 90。 C 可以放在 D (500) 和 M (1000) 的左边来表示 400 和 900。
代码
class Solution {public int romanToInt(String s) {HashMapCharacter, Integer hashMap new HashMap();hashMap.put(I, 1);hashMap.put(V, 5);hashMap.put(X, 10);hashMap.put(L, 50);hashMap.put(C, 100);hashMap.put(D, 500);hashMap.put(M, 1000);int res 0;char[] c s.toCharArray();for (int i 0; i c.length; i) {if (hashMap.containsKey(c[i])) {res hashMap.get(c[i]);}if (i ! c.length - 1) {if (c[i] I (c[i 1] V || c[i 1] X)) {res - 2;}if (c[i] X (c[i 1] L || c[i 1] C)) {res - 20;}if (c[i] C (c[i 1] D || c[i 1] M)) {res - 200;}}}return res;}
}
思想偏向暴力解法所以时间复杂度较高使用了一次循环和多个if判断。 力扣官方题解
力扣LeetCode官网 - 全球极客挚爱的技术成长平台备战技术面试力扣提供海量技术面试资源帮助你高效提升编程技能轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/roman-to-integer/solutions/774992/luo-ma-shu-zi-zhuan-zheng-shu-by-leetcod-w55p/
思路一样只是我使用的是“多加多减”它使用的是“直接减”。还有一处不同的地方是它利用value进行对比而我使用key进行比较。
代码
class Solution {MapCharacter, Integer symbolValues new HashMapCharacter, Integer() {{put(I, 1);put(V, 5);put(X, 10);put(L, 50);put(C, 100);put(D, 500);put(M, 1000);}};public int romanToInt(String s) {int ans 0;int n s.length();for (int i 0; i n; i) {int value symbolValues.get(s.charAt(i));if (i n - 1 value symbolValues.get(s.charAt(i 1))) {ans - value;} else {ans value;}}return ans;}
}