Roman to Integer
来源:互联网 发布:js获取class 编辑:程序博客网 时间:2024/06/05 21:12
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
思路:
首先,学习一下罗马数字,参考罗马数字
罗马数字是最古老的数字表示方式,比阿拉伯数组早2000多年,起源于罗马
罗马数字有如下符号:
基本字符IVXLCDM对应阿拉伯数字1510501005001000
计数规则:
- 相同的数字连写,所表示的数等于这些数字相加得到的数,例如:III = 3
- 小的数字在大的数字右边,所表示的数等于这些数字相加得到的数,例如:VIII = 8
- 小的数字,限于(I、X和C)在大的数字左边,所表示的数等于大数减去小数所得的数,例如:IV = 4
- 正常使用时,连续的数字重复不得超过三次
- 在一个数的上面画横线,表示这个数扩大1000倍(本题只考虑3999以内的数,所以用不到这条规则)
其次,罗马数字转阿拉伯数字规则(仅限于3999以内):
观察规律:从4,9,身上看到规律。IV,IX。只有当前的数字比左边的数字大,则要减去左边的数。否则,一直加。
如何减去左边的数,也就是减去左边的数的两倍然后加上当前数,因为之前已经加过左边的数了。
public class Solution { public int romanToInt(String s) { if(s == null) return 0; int sum = 0; int pre = 0; int cur = 0; for(int i=0; i<s.length(); i++){ int val = getNumber(s.charAt(i)); cur = val; if(cur > pre){ sum = sum - 2* pre + cur; pre = cur; } else { sum = sum + cur; pre = cur; } } return sum; } public int getNumber(char c){ int val = 0; switch(c){ case 'I': val = 1; break; case 'V': val = 5; break; case 'X': val = 10; break; case 'L': val = 50; break; case 'C': val = 100; break; case 'D': val = 500; break; case 'M': val = 1000; break; } return val; }}
0 0
- Integer to Roman & Roman to Integer
- Integer to Roman & Roman to Integer
- LeetCode Roman to Integer && Integer to Roman
- 【leetcode】Roman to Integer | Integer to Roman
- Leetcode - "Roman to Integer" & "Integer to Roman"
- LeetCode:Roman to Integer,Integer to Roman
- Integer to Roman and Roman to Integer
- LeetCode Integer to Roman & Roman to Integer
- Roman to Integer/Integer to Roman
- leetcode - roman to integer & integer to roman
- "Roman to Integer" and "Integer to Roman"
- Roman to Integer &&Integer to Roman
- Roman to Integer and Integer to Roman
- Roman to Integer/Integer to Roman
- LeetCode:Roman to Integer
- LeetCode: Integer to Roman
- LeetCode: Roman to Integer
- LeetCode Integer to Roman
- SQLServer和Oracle常用函数对比@http://www.enet.com.cn/article/2004/1207/A20041207369373.shtml
- struts2中的constant配置详解
- Android 网络通信框架Volley简介(Google IO 2013)
- 为oracle授权dba权限
- hdu1027 又是next_permutaiton
- Roman to Integer
- Python的作用域(zz)
- Android中记录与调试——Logcat和Debug的使用
- JS函数参数传递问题
- Oracle用户、权限、角色管理、数据库备份
- VS2010 更改MFC标题栏图标和生成的执行文件图标
- LINUX时间同步
- 如果你喜欢上了一个程序员小伙 献给所有的程序员女友
- 获取iphone的硬件版本以及系统信息