此后简单记录自己的刷leecode的代码。有错望指正谢谢。
看到leecode官方答案是从前往后遍历,但是我觉得这道题从后往前遍历更好理解,当遇到比最大数小的就相减,当遇到比最大数大的就相加,并且更新最大数。
大致理解:
最后一题示例:
package Leecode;
public class 罗马数字转数字 {
public static void main(String[] args) {
String s = "IV";
int n = s.length();
int sum = 0;
int nowlevel = getValue(s.charAt(n-1));
int p1;
for (int i = n - 1; i >= 0; i--) {
p1 = getValue(s.charAt(i));
if (nowlevel <= p1){
sum += p1;
nowlevel = p1;
}else{
sum -= p1;
}
// System.out.println("每次i:" + sum);
}
System.out.println(sum);
}
public static int getValue(char ch){
switch(ch){
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;
}
}
}