013罗马数字转整数
一、java代码
/*
* @lc app=leetcode.cn id=13 lang=java
*
* [13] 罗马数字转整数
*/
// @lc code=start
class Solution {
public int romanToInt(String s) {
int sum=0;
//第0位存入preNum
int preNum=getValue(s.charAt(0));
//遍历字符串s
for(int i=1;i<s.length();i++){
//取出当前第i个字符的值,存入num
int num=getValue(s.charAt(i));
//将前一个数值与当前数值比较
//小值在左边则做减法
if(preNum<num){
sum-=preNum;
//小值在右边则做加法
}else{
sum+=preNum;
}
//把当前值num赋给preNum
preNum=num;
}
//最后一位没有下一位,做加法即可
sum+=preNum;
//cannot find symbol -> num
//sum+=num;
return sum;
}
//定义函数方法
private int getValue(char ch){
//switch用的太妙了
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;
}
}
}
// @lc code=end
二、题解思路(参考的力扣官网解答)
1、罗马数字由I,V,X,L,C,D,M
构成;
2、当小值在大值左边,则减小值,如IV=5-1=4
;
3、当小值在大值右边,则加小值,如VI=5+1=6
;
4、由上可知,右值永远为正,因此最后一位必然为正。
在代码实现上,可以往后多看一位,对比当前位与后一位的大小关系,从而确定当前位是加法还是减法;当没有下一位时,做加法即可。