题目描述
题目链接:https://leetcode-cn.com/problems/roman-to-integer/
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
解题思路
罗马数字有如下符号:
基本字符 I V X L C D M
对应阿拉伯数字 1 5 10 50 100 500 1000
将罗马数字转换成阿拉伯数字。
计数规则:
相同的数字连写,所表示的数等于这些数字相加得到的数,例如:III = 3
小的数字在大的数字右边,所表示的数等于这些数字相加得到的数,例如:VIII = 8
小的数字,限于(I、X和C)在大的数字左边,所表示的数等于大数减去小数所得的数,例如:IV = 4
正常使用时,连续的数字重复不得超过三次
在一个数的上面画横线,表示这个数扩大1000倍(本题只考虑3999以内的数,所以用不到这条规则)
基本算法流程:
从前向后遍历数字,如果某个数比前一个数小,则加上该数。反之,减去前一个数的两倍然后加上该数。
程序实现
public class Solution {public int romanToInt(String s) {if(s&#61;&#61;null||s.length()&#61;&#61;0)return 0;int result&#61;charToInt(s.charAt(0));int pre,cur;for(int i&#61;1;i<s.length();i&#43;&#43;){pre&#61;charToInt(s.charAt(i-1));cur&#61;charToInt(s.charAt(i));if(cur<&#61;pre)result&#43;&#61;cur;elseresult&#43;&#61;cur-pre*2;}return result;}private int charToInt(char c){switch (c) {case &#39;I&#39;:return 1;case &#39;V&#39;:return 5;case &#39;X&#39;:return 10;case &#39;L&#39;:return 50;case &#39;C&#39;:return 100;case &#39;D&#39;:return 500;case &#39;M&#39;:return 1000;default:return 0;}}}