Roman to Integer

来源:互联网 发布:遗传算法本质 编辑:程序博客网 时间:2024/09/21 06:38

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.



搞了挺久一直没搞出来。看了网上的参考后知道是推导的公式写错了。如果是从高位往地位扫(也就是一次循环用s.charAt(i)由高往低),那么相邻元素之间的关系是:1当前元素如果是最高位,先加上对应的元素 2 如果当前元素roman[s.charAt(i)] 比上一个元素roman[s.charAt(i-1)]的数字大,那么由于上一个循环已经加过一次 roman[s.charAt(i-1)],所以需要减去两倍的roman[s.charAt(i-1)],先抵消上一回多加的,然后再正常减去一个。


实现代码:

其实我觉也可以反向循环做这道题,判断roman[s.charAt(i)] 跟roman[s.charAt(i+1)] 的大小关系,有机会补上。

public class Solution { public int romanToInt(String s) {int []roman = new int[256];roman['I']=1;roman['V']=5;roman['X']=10;roman['L']=50;roman['C']=100;roman['D']=500;roman['M']=1000;int result=0;result =roman[s.charAt(0)];for(int i=1;i<s.length();i++){int location =s.charAt(i);         int locationP = s.charAt(i-1);if(i==0){result =roman[location];//System.out.println("init: "+roman[location]);continue;}if(roman[locationP]< roman[location]){result += roman[location] -2*roman[locationP];//System.out.println("-: roman[location],roman[location+1]"+roman[location]+" "+roman[location+1]);}else{result+=roman[location] ;//System.out.println("+: "+roman[(char)location]);}}return result;            }}


0 0
原创粉丝点击