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;
}
}
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; }
相关文章推荐
- leetcode_13_Roman to Integer (easy)
- Easy 4 Roman to Integer(13)
- Leetcode OJ 13 Roman to Integer [Easy]
- [Leetcode 13, Easy] Roman To Integer
- 【LeetCode】(13)Roman to Integer(Easy)
- leetcode_13_Roman to Integer(C++)(easy)
- LeetCode 13 Roman to Integer (easy)——python
- LeetCode-13-Roman to Integer(number/模拟)-Easy
- [LeetCode][13]Roman to Integer解析 罗马字符转int类型关于栈的常数实现-Java实现
- 【LeetCode】12 & 13 - Integer to Roman & Roman to Integer
- LeetCode-13 Roman to Integer
- LeetCode 12-13:Integer to Roman&&Roman to Integer
- 【LeetCode 13】 Roman to Integer
- 【LeetCode】13 Roman to Integer
- Leetcode 13 Roman to Integer 罗马数字转整数
- LeetCode#13 Roman to Integer
- leetcode_13_Roman to Integer
- LeetCode(13)-- RomanToInteger
- LeetCode(13) Roman to Integer
- 46. leetCode 13: Roman to Integer【罗马数转化为数字】