罗马数字转阿拉伯数字
我自己写的代码既冗余效率又低。故参考了LeetCode大佬的代码,效率是真的高,不过占用内存却没有想象中的那么好。
1 import java.util.*; 2 3 class Solution { 4 public int romanToInt(String s) { 5 int sum = 0; 6 int preNum = getValue(s.charAt(0)); 7 for(int i = 1;i < s.length(); i ++) { 8 int num = getValue(s.charAt(i)); 9 if(preNum < num) { 10 sum -= preNum; 11 } else { 12 sum += preNum; 13 } 14 preNum = num; 15 } 16 sum += preNum; 17 return sum; 18 } 19 20 private int getValue(char ch) { 21 switch(ch) { 22 case 'I': return 1; 23 case 'V': return 5; 24 case 'X': return 10; 25 case 'L': return 50; 26 case 'C': return 100; 27 case 'D': return 500; 28 case 'M': return 1000; 29 default: return 0; 30 } 31 } 32 } 33 34 public class RomeToNums { 35 36 public static void main(String[] args) { 37 Solution so = new Solution(); 38 int testResult = so.romanToInt("XLII"); 39 System.out.println(testResult); 40 } 41 42 }
这里采用的是往后多看一步,把前面的数记住的方法,如果前面的数比后面的数小,那么就拿总数减,反之则是加。(这里默认输入的罗马数字都是合法的)

浙公网安备 33010602011771号