LeetCode -- Roman to Integer
2015-11-07 18:24
447 查看
题目描述:
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]。
实现代码:
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(); } } }
相关文章推荐
- centos+scala2.11.4+hadoop2.3+spark1.3.1环境搭建
- UVa1587 Box(排序)
- Android 计时器 Chronometer的简单实用
- http响应报文
- Spring ConnectionHolder
- iOS常用的几种设计模式
- 使用git来打包Android源码
- HTTP响应码摘自apach官网
- LeetCode -- Repeated DNA Sequences
- 值得你关注的Android6.0上的重要变化(一)
- JPA乐观锁
- 归并排序
- LeetCode -- Number of Islands
- 烂泥:haproxy学习之手机规则匹配
- SpringMVC+Spring+MyBatis配置
- 通过“改变引用”和“加锁”的方式提高缓存访问并发度
- service服务、电话录音
- 详解宏定义(#define)
- 软件测试从零开始之二:开启测试之旅(上)
- 达内学习日志Day48:注册与登录(二)