Roman To Integer leetcode java
问题描述:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
算法:
/**
* 输入一个罗马数字,返回它的整型表示
* @author admin
* 转换规则:从右向左或者从左向右遍历均可
* 1 相同数字连写,相加 ;2 小数字在大数字右边,相加;3 小数字在大数字左边,大的减去小的
*/
方法一:hashmap 从右向左遍历
//将罗马数字转换为整型值
public static int romanToInt(String s){
HashMap<Character, Integer> roma_weight = new HashMap<Character, Integer>();
roma_weight.put('I', 1);
roma_weight.put('V', 5);
roma_weight.put('X',10);
roma_weight.put('L', 50);
roma_weight.put('C', 100);
roma_weight.put('D',500);
roma_weight.put('M',1000);
char[] roma = s.toCharArray(); //将罗马数字转化为字符数组
int length = roma.length;
int preValue = 0; //前一步的value
int value = roma_weight.get(roma[length - 1]) ;// 当前的value //从右向左遍历
for(int i = length - 2; i >= 0 ; i--){
//小的数字在大数字右边,直接相加
if( roma_weight.get(roma[i]) >= roma_weight.get(roma[i + 1])) {
preValue = value;
value = value + roma_weight.get(roma[i]);
}
else { //小的数字在大数字左边,大的减去小的
value = preValue + roma_weight.get(roma[i + 1]) - roma_weight.get(roma[i]);
}
}
return value;
}
方法二:switch case,从左向右遍历
//与第一种方法基本相同,从左向右
public static int romanToInt1(String s) {
char[] ss = s.toCharArray();
int ret = toNumber(ss[0]);
for (int i = 1; i < ss.length; i++) {
if (toNumber(ss[i - 1]) < toNumber(ss[i])) {
//ret - toNumber(ss[i - 1]) = preValue; 然后再进行 preValue + toNumber(ss[i]) - toNumber(ss[i - 1]);
ret += toNumber(ss[i]) - 2 * toNumber(ss[i - 1]); //相当于方法一中的 preValue + roma_weight.get(roma[i + 1]) - roma_weight.get(roma[i]);
} else {
ret += toNumber(ss[i]);
}
}
return ret;
} //罗马数字权重表,没有空间复杂度,较hashmap要好一些
public static int toNumber(char ch) {
switch (ch) {
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;
}
return 0;
}
Roman To Integer leetcode java的更多相关文章
- 「Leetcode」13. Roman to Integer(Java)
分析 把具体的情况一个一个实现即可,没有什么幺蛾子. 代码 class Solution { public int romanToInt(String s) { int ans = 0; for (i ...
- Roman to Integer -- LeetCode 13
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 t ...
- Roman to Integer [LeetCode]
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 t ...
- 13. Roman to Integer (JAVA)
Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 ...
- Reverse Integer LeetCode Java
Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 public cl ...
- LeetCode 13. 罗马数字转整数(Roman to Integer)
13. 罗马数字转整数 13. Roman to Integer 题目描述 罗马数字包含以下七种字符: I,V,X,L,C,D 和 M. 字符 数值 I 1 V ...
- [LeetCode][Python]Roman to Integer
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com'https://oj.leetcode.com/problems/roman-t ...
- Leetcode#13. Roman to Integer(罗马数字转整数)
题目描述 罗马数字包含以下七种字符:I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即 ...
- LeetCode: Roman to Integer 解题报告
Roman to IntegerGiven a roman numeral, convert it to an integer. Input is guaranteed to be within th ...
随机推荐
- 分布式事务框架&解决方案参考
两种开源解决方案框架介绍: https://blog.csdn.net/zyndev/article/details/79604395#_97 LCN: https://www.jianshu.com ...
- hihoCoder week4 Trie图
ac自动机 题目链接 https://hihocoder.com/contest/hiho4/problem/1 参考:https://blog.csdn.net/baidu_30541191/art ...
- CentOS7设置定时任务 每隔30分钟执行一次命令
ref https://blog.csdn.net/xiangxianghehe/article/details/78149094 一.安装 crontabs服务并设置开机自启: yum inst ...
- P4777 【模板】扩展中国剩余定理(EXCRT)
思路 中国剩余定理解决的是这样的问题 求x满足 \[ \begin{matrix}x \equiv a_1(mod\ m_1)\\x\equiv a_2(mod\ m_2)\\ \dots\\x\eq ...
- ARM伪指令
1.伪指令是什么 ARM伪指令不是ARM指令集中的指令,只是为了编程方便人们定义了伪指令. 在汇编时这些指令将会被等效的ARM指令或arm指令的组合代替. 编程时可以像其他ARM指令一样使用伪指令,区 ...
- 基于SVM的python简单实现验证码识别
验证码识别是一个适合入门机器学习的项目,之前用knn 做过一个很简单的,这次用svm来实现.svm直接用了开源的库libsvm.验证码选的比较简单,代码也写得略乱,大家看看就好. 1. 爬取验证码图片 ...
- java虚拟机知识和 内存 堆(heap)、栈(stack)和方法区(method)
1.虚拟机实例 每个java程序都运行在自己的java虚拟机实例中,运行三个java程序就会得到三个虚拟机实例 守护线程(虚拟机自己使用,比如说执行垃圾收集任务的线程) 非守护线程(java初试线程, ...
- java复制文件夹中的所有文件和文件夹到另一个文件夹中
1.复制文件夹 public static void copyDir(String oldPath, String newPath) throws IOException { File file = ...
- 【Java】【线程】
/* 栗子 通过Runnable接口实现简历线程实例 */ class Dog implements Runnable{ //重写run函数 public void run(){ int times ...
- C#:导入Excel通用类(Xls格式)
PS:在CSV格式和XLSX格式中有写到通用调用的接口和引用的插件,所以在这个xls格式里面并没有那么详细,只是配上xls通用类. 一.引用插件NPOI.dll.NPOI.OOXML.dll.NPOI ...