码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode -- Roman to Integer

时间:2015-11-08 15:20:42      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

题目描述:
Given a roman numeral, convert it to an integer.


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


就是把罗马数字转化为整数。


1. 首先要了解罗马数字对应的整数:
字符 I V X L C D M
数字 1 5 10 50 100 500 1000


2.转换规则
在罗马字符串s中,对于s[i]和s[i+1],如果s[i+1]数字小,则整数为s[i]+s[i+1],否则:
如果s[i+1]比s[i]大,则s[i]与s[i+1]表示s[i+1]-s[i]。


思路:
遍历罗马字符串s,一一映射为字符,total初始化为s[0],i∈[0,n),比较s[i]和s[i+1],如果后面大则直接累加s[i+1];否则把减去s[i]的二倍并加上当前数s[i+1]。




实现代码:


public class Solution {
    public int RomanToInt(string s) 
    {
       if(string.IsNullOrEmpty(s))
       {
    		return 0;
    	}
    	
    	var len = s.Length;
    	var result = Convert(s[0]);
    	if(len < 2){
    		return result;
    	}
    	for(var i = 1;i < len; i++){
    		var pre = Convert(s[i - 1]);
    		var current = Convert(s[i]);
    		
    		if(current <= pre){
    			result += current;
    		}else{
    			result = result - 2 * pre + current;
    		}
    	}
    	
    	return result;
    }
	
private int Convert(char c) 
{
	switch (c) {
		case ‘I‘:  
			return 1;
		case ‘V‘:
			return 5;
		case ‘X‘:  
			return 10;  
		case ‘L‘:  
			return 50;  
		case ‘C‘:  
			return 100;  
		case ‘D‘:  
			return 500;  
		case ‘M‘:  
			return 1000;  
		default : 
			throw new ArgumentException();
	}
}
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

LeetCode -- Roman to Integer

标签:

原文地址:http://blog.csdn.net/lan_liang/article/details/49704123

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!