LeetCode——13. 罗马数字转整数

题目描述:

 

注:本分类博客中的所有代码可以直接拷贝到eclipise

代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 
 *
 * @版权 : Copyright (c) 2017-2018 *********公司技术开发部
 * @author: gaozhenchao
 * @E-mail: 1226046769@qq.com
 * @版本: 1.0
 * @创建日期: 2019年1月23日 下午4:42:46
 * @ClassName Solution
 * @类描述-Description: 给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
 * @修改记录:
 * @版本: 1.0
 */
class Solution {
	public int romanToInt(String s) {
		int result = 0;
		char[] charArray = s.toCharArray();

        //另一种方法:
		// Map<Character, Integer> map = new HashMap<Character, Integer>();
		//
		// map.put('I', 1);
		// map.put('V', 5);
		// map.put('X', 10);
		// map.put('L', 50);
		// map.put('C', 100);
		// map.put('D', 500);
		// map.put('M', 1000);
		for (int i = 0; i < charArray.length; i++) {
			// 防止数组越界
			if (i + 1 < charArray.length) {
				// 匹配特殊情况
				// I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9
				if (charArray[i] == 'I' && charArray[i + 1] == 'V') {
					result += 4;
					i = i + 1;
					continue;
				} else if (charArray[i] == 'I' && charArray[i + 1] == 'X') {
					result += 9;
					i = i + 1;
					continue;
					// X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90
				} else if (charArray[i] == 'X' && charArray[i + 1] == 'L') {
					result += 40;
					i = i + 1;
					continue;
				} else if (charArray[i] == 'X' && charArray[i + 1] == 'C') {
					result += 90;
					i = i + 1;
					continue;
					// C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900
				} else if (charArray[i] == 'C' && charArray[i + 1] == 'D') {
					result += 400;
					i = i + 1;
					continue;
				} else if (charArray[i] == 'C' && charArray[i + 1] == 'M') {
					result += 900;
					i = i + 1;
					continue;
				}
			}
            //另一种方法:
			// for (Entry<Character, Integer> entry : map.entrySet()) {
			// if (charArray[i] == entry.getKey()) {
			// result += entry.getValue();
			// }
			//
			// }
			switch (charArray[i]) {
			case 'I':
				result += 1;

				break;
			case 'V':
				result += 5;

				break;
			case 'X':
				result += 10;

				break;
			case 'L':
				result += 50;

				break;
			case 'C':
				result += 100;

				break;
			case 'D':
				result += 500;

				break;
			case 'M':
				result += 1000;

				break;
			}

		}
		return result;

	}
}

// public class Solution {
// public bool IsPalindrome(int x) {
// // 特殊情况:
// // 如上所述,当 x < 0 时,x 不是回文数。
// // 同样地,如果数字的最后一位是 0,为了使该数字为回文,
// // 则其第一位数字也应该是 0
// // 只有 0 满足这一属性
// if(x < 0 || (x % 10 == 0 && x != 0)) {
// return false;
// }
//
// int revertedNumber = 0;
// while(x > revertedNumber) {
// revertedNumber = revertedNumber * 10 + x % 10;
// x /= 10;
// }
//
// // 当数字长度为奇数时,我们可以通过 revertedNumber/10 去除处于中位的数字。
// // 例如,当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,revertedNumber = 123,
// // 由于处于中位的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。
// return x == revertedNumber || x == revertedNumber/10;
// }
// }

public class MainClass {

	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String line;
		while ((line = in.readLine()) != null) {

			int ret = new Solution().romanToInt(line);

			String out = String.valueOf(ret);

			System.out.println(out);
		}
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值