13. 罗马数字转整数

image.png
image.png

解析罗马字符串

执行用时:2 ms, 在所有 Java 提交中击败了100.00%的用户 内存消耗:41.1 MB, 在所有 Java 提交中击败了63.58%的用户

  1. /**
  2. * 罗马数字由 `I,V,X,L,C,D,M` 组成
  3. * 如果小数值在大数值左边,则用减法,如 `IV = 5 - 1 = 4`
  4. * 如果小数值在大数值右边,则用加法,如 `VI = 5 + 1 = 5`
  5. *
  6. * 总而言之,如果小数值在大数值右边,则做加法,否则做减法
  7. */
  8. class Solution {
  9. public int romanToInt(String s) {
  10. int sum = 0;
  11. // 用于存放上一位,初使化为第 0 位,for 从 1 开始
  12. int preNum = getValue(s.charAt(0));
  13. for (int i = 1; i < s.length(); i++) {
  14. int num = getValue(s.charAt(i));
  15. if (num > preNum) {
  16. sum -= preNum;
  17. } else {
  18. sum += preNum;
  19. }
  20. preNum = num;
  21. }
  22. sum += preNum;
  23. return sum;
  24. }
  25. private int getValue(char ch) {
  26. switch(ch) {
  27. case 'I': return 1;
  28. case 'V': return 5;
  29. case 'X': return 10;
  30. case 'L': return 50;
  31. case 'C': return 100;
  32. case 'D': return 500;
  33. case 'M': return 1000;
  34. default: return 0;
  35. }
  36. }
  37. }