LeetCode-探索-初级算法-数学-4. 罗马数字转整数(个人做题记录,不是习题讲解)
LeetCode探索-初级算法:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/
- 罗马数字转整数
-
语言:java
-
思路:从前往后判断诸如LIV的比较麻烦,从尾向前则只要当前小于上一个,就用减法,其他用加法,得出最后值
-
代码(4ms,99.88%):有点意外,没想到自己写的代码运行的速度还挺快的
class Solution { public int romanToInt(String s) { int pre = 0; int cur = 0; int res = 0; char[] arr = s.toCharArray(); for(int i = arr.length-1; i >=0; --i){ pre = cur; cur = getNum(arr[i]); if(cur<pre) res -= cur; else res += cur; } return res; } public int getNum(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; } } }
-
参考代码(3ms):基本是一样的,不过是把数值判断和加减法判断放到同一个case里处理了。不过下面对加减法的判断的方式也是值得学习的。
class Solution { public int romanToInt(String s) { int res = 0; for (int i = s.length() - 1; i >= 0; i--) { char c = s.charAt(i); switch (c) { case 'I': res += (res >= 5 ? -1 : 1); break; case 'V': res += 5; break; case 'X': res += 10 * (res >= 50 ? -1 : 1); break; case 'L': res += 50; break; case 'C': res += 100 * (res >= 500 ? -1 : 1); break; case 'D': res += 500; break; case 'M': res += 1000; break; } } return res; } }