您的位置:首页 > 其它

leetcode_Roman to Integer

2015-08-12 10:17 369 查看

描述:

Given a roman numeral, convert it to an integer.

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

思路:

1.就像脑筋急转弯一样,这一题还真的搞了好久,主要是没想明白思路,现在再回过头去看代码,显而易见,或许这才是制造和创造的区别吧
2.大致过程就是一个循环,当currentChar的量级小于nextChar的量级时,直接加上nextChar的量级和currentChar的量级之差即可,其它的情况直接加上currentChar的量级,罗马数字就类似字符串的形式
3.另:这也就是有计算机才可以这么算,这对普通人来说得多麻烦啊,罗马数字很啰嗦。

代码:

public int romanToInt(String s) {
char chArr[]={'I','V','X','L','C','D','M','i','v','x','l','c','d','m'};
int numArr[]={1,5,10,50,100,500,1000,1,5,10,50,100,500,1000};
HashMap<Character, Integer>map=new HashMap<Character, Integer>();
for(int i=0;i<chArr.length;i++ )
map.put(chArr[i], numArr[i]);
int j=0;
int strLen=s.length();
char curCh,nextCh;
int sum=0;
for(int i=0;i<strLen;i++)
{
curCh=s.charAt(i);
j=i+1;
if(j<strLen)
{
nextCh=s.charAt(j);
if(map.get(curCh)<map.get(nextCh))//如果当前字符所代表的权值小于下一个字符所代表的权值
{
sum+=map.get(nextCh)-map.get(curCh);
i=j;//一次循环跳过两个字符
}else {
sum+=map.get(curCh);
}

}else {
sum+=map.get(curCh);//判断最后的字符
}

}
return sum;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: