leetcode解题之 12&13. Integer to Roman Java版(罗马数字和数字的转换)

12. Integer to Roman

Given an integer, convert it to a roman numeral.

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

把数字转化成罗马数字(不知转换规则,百度吧)

public String intToRoman(int num) {
		String str = "";
		String[] symbol = { "M", "CM", "D", "CD", "C", 
				"XC", "L", "XL", "X", "IX", "V", "IV", "I" };
		int[] value = { 1000, 900, 500, 400, 100, 
				90, 50, 40, 10, 9, 5, 4, 1 };
		for (int i = 0; num != 0; i++) {
			while (num >= value[i]) {
				num -= value[i];
				str += symbol[i];
			}
		}
		return str;
	}

13. Roman to Integer

Given a roman numeral, convert it to an integer.

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

把罗马数字转化数字

 基本字符:
 I、V、X、L、C、D、M
 相应的阿拉伯数字表示为:
 1、5、10、50、100、500、1000
 (1)相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;
 (2)小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;
 (3)小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;

 思路如下:
 从左边第一个数字开始,依次加,因为有(3)的情况的存在,
 加过以后判断,要是存在(3)的情况,就减去前一个(i-1)*2,因为本来应该减去前面这个小的数, 但是上次一循环还加了一次,于是这次就减去2次。

public int romanToInt(String s) {
		if (s == null || s.length() == 0)
			return 0;
		HashMap<Character, Integer> map = new HashMap<>();
		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);
		// 使用s.toCharArray()后使用char数组在计算会TLE
		int value = map.get(s.charAt(0));
		for (int i = 1; i < s.length(); i++) {
			if (map.get(s.charAt(i)) > map.get(s.charAt(i - 1))) {
				value = value + map.get(s.charAt(i)) 
				- 2 * map.get(s.charAt(i - 1));
			} else {
				value = value + map.get(s.charAt(i));
			}
		}
		return value;
	}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值