域名网站平台,网页设计怎么做流动图片,asp公司企业网站模板源代码,品牌策划公司怎么找客户【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主#xff0c;题解使用C语言。#xff08;若有使用其他语言的同学也可了解题解思路#xff0c;本质上语法内容一致题解使用C语言。若有使用其他语言的同学也可了解题解思路本质上语法内容一致 【题目描述】
罗马数字包含以下七种字符: 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 。
【示例一】
输入: s III
输出: 3
【示例二】
输入: s IV
输出: 4
【示例三】
输入: s IX
输出: 9
【示例四】
输入: s LVIII
输出: 58
解释: L 50, V 5, III 3.
【示例五】
输入: 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 。
【代码】
// 模拟将每个字符视作一个单独的值若一个数字右侧的数字比它大则将该数字的符号取反。class Solution {
private:unordered_mapchar, int symbolValues {{I, 1},{V, 5},{X, 10},{L, 50},{C, 100},{D, 500},{M, 1000},};public:int romanToInt(string s) {int ans 0;int n s.length();for (int i 0; i n; i) {int value symbolValues[s[i]];if (i n - 1 value symbolValues[s[i 1]]) {ans - value;} else {ans value;}}return ans;}
};