看到这道题,存在键值对,所以先建个泛型字典,把键值填进去。
由于这道题存在两个字符表示一个数字的情况,所以在for循环的时候判断一下,看看当前字符串中循环到的字符是否和下一个字符能够组成存在在字典里的键值对,如果能,把值加上,跳过下一个字符进入下下个字符循环,如果不能正常匹配就行了
public class Solution { public int RomanToInt(string s) { Dictionary<string, int> map = new Dictionary<string, int>(); map.Add("I", 1); map.Add("IV", 4); map.Add("V", 5); map.Add("IX", 9); map.Add("X", 10); map.Add("XL", 40); map.Add("L", 50); map.Add("XC", 90); map.Add("C", 100); map.Add("CD", 400); map.Add("D", 500); map.Add("CM", 900); map.Add("M", 1000); int num = 0; for (int i = 0; i < s.Length; i++) { string a = ""; if ((i + 1) < s.Length) { a = s[i].ToString() + s[i + 1].ToString(); } if (map.ContainsKey(a)) { num += map[a]; i++; } else { num += map[s[i].ToString()]; } } return num; } }