您的位置:首页 > 其它

Easy 13题 Roman to Integer

2016-10-26 08:20 260 查看
Question:

Given a roman numeral, convert it to an integer.

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

public class Solution {
public int romanToInt(String s) {
Stack<Character> st = new Stack<Character>();
int res=0;
for(int i=0;i<=s.length()-1;i++)
{

if(s.charAt(i)=='M'){
res+=1000;
if(!st.isEmpty()){
if(st.peek()=='C'){
res-=100*2;
st.pop();
}
else if(st.peek()=='X'){
res-=10*2;
st.pop();
}
else if(st.peek()=='I'){
res-=1*2;
st.pop();
}
}
}
else if(s.charAt(i)=='D'){
res+=500;
if(!st.isEmpty()){
if(st.peek()=='C'){
res-=100*2;
st.pop();
}
else if(st.peek()=='X'){
res-=10*2;
st.pop();
}
else if(st.peek()=='I'){
res-=1*2;
st.pop();
}
}
}
else if(s.charAt(i)=='C'){
res+=100;
if(!st.isEmpty()){
if(st.peek()=='X'){
res-=10*2;
st.pop();
}
else if(st.peek()=='I'){
res-=1*2;
st.pop();
}
}
st.push(s.charAt(i));
}
else if(s.charAt(i)=='L'){
res+=50;
if(!st.isEmpty()){
if(st.peek()=='X'){
res-=10*2;
st.pop();
}
else if(st.peek()=='I'){
res-=1;
st.pop();
}
}
}
else if(s.charAt(i)=='X'){
res+=10;
if(!st.isEmpty()){
if(st.peek()=='I'){
res-=1*2;
st.pop();
}
}
st.push(s.charAt(i));
}
else if(s.charAt(i)=='V'){
res+=5;
if(!st.isEmpty()){
if(st.peek()=='I'){
res-=1*2;
st.pop();
}
}
}
else if(s.charAt(i)=='I'){
res+=1;
st.push(s.charAt(i));
}

}
return res;
}
}
//another solution without stack. i like that
int[] nums=new int[s.length()];
for(int i=0;i<=s.length()-1;i++)
{
char cur=s.charAt(i);
switch (cur){
case 'M':
nums[i]=1000;
break;
case 'D':
nums[i]=500;
break;
case 'C':
nums[i]=100;
break;
case 'L':
nums[i]=50;
break;
case 'X':
nums[i]=10;
break;
case 'V':
nums[i]=5;
break;
case 'I':
nums[i]=1;
break;
}
}
int sum=0;
for(int i=0;i<=nums.length-2;i++)
{
if(nums[i]<nums[i+1])
sum-=nums[i];
else
sum+=nums[i];
}
sum+=nums[nums.length-1];
return sum;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: