LeetCode OJ算法题(十三):Roman to Integer

题目:

Given a roman numeral, convert it to an integer.

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

解法:

规则与上一篇博客一样,只是这次输入为字符串,我们一样从高位开始遍历,逢M+1000,逢D+500,以此类推,需要注意的是减法的组合:IV,IX,XC,XL,CD,CM,单独拿出来讨论即可。

public class No13_RomanToInteger {
	public static void main(String[] args){
		System.out.println(romanToInt("MMDCCXCIV"));
	}
	public static int romanToInt(String s) {
		int ret = 0;
		int p = 0;
		while(p < s.length()){
			if(p+1<s.length() && s.charAt(p+1)=='M' && s.charAt(p)=='C'){
				ret += 900;
				p += 2;
				continue;
			}
			if(p+1<s.length() && s.charAt(p+1)=='D' && s.charAt(p)== 'C'){
				ret += 400;
				p += 2;
				continue;
			}
			if(p+1<s.length() && s.charAt(p+1)=='C' && s.charAt(p)== 'X'){
				ret += 90;
				p += 2;
				continue;
			}
			if(p+1<s.length() && s.charAt(p+1)=='L' && s.charAt(p)== 'X'){
				ret += 40;
				p += 2;
				continue;
			}
			if(p+1<s.length() && s.charAt(p+1)=='X' && s.charAt(p)== 'I'){
				ret += 9;
				p += 2;
				continue;
			}
			if(p+1<s.length() && s.charAt(p+1)=='V' && s.charAt(p)== 'I'){
				ret += 4;
				p += 2;
				continue;
			}
			if(s.charAt(p) == 'M'){
				ret += 1000;
				p++;
				continue;
			}
			if(s.charAt(p) == 'D'){
				ret += 500;
				p++;
				continue;
			}
			if(s.charAt(p) == 'C'){
				ret += 100;
				p++;
				continue;
			}
			if(s.charAt(p) == 'L'){
				ret += 50;
				p++;
				continue;
			}
			if(s.charAt(p) == 'X'){
				ret += 10;
				p++;
				continue;
			}
			if(s.charAt(p) == 'V'){
				ret += 5;
				p++;
				continue;
			}
			if(s.charAt(p) == 'I'){
				ret += 1;
				p++;
				continue;
			}
		}
        return ret;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值