Java实现LeetCode_0013_RomanToInteger
package javaLeetCode.primary;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Stack;
public class RomanToInteger_13 {
public static void main(String[] args) {
System.out.println("Please input a roman numeral:");
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
String s = input.next();
System.out.println(romanToInt_3(s));
}// end main()
/**
* Conventional thinking.
* Scan from head to tail and use Map or Array.
*/
/*
* Test Data:
* III--3
* IV--4
* IX--9
* LVIII--58
* MCMXCIV--1994
* MCCCXIV--1314
* MMMIX--3009
* MMMCCXLIX--3249
*/
public static int romanToInt_1(String s) {
char[] str = s.toCharArray();
Map<Character, Integer> map = new HashMap<Character, Integer>();
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);
int num = 0;
for (int i = 0; i < s.length() - 1; i++) {
if (map.get(str[i]) >= map.get(str[i + 1])) {
num += map.get(str[i]);
} else {
num -= map.get(str[i]);
} // end if
} // end for
num += map.get(str[str.length - 1]);
return num;
}// end romanToInt()
/**
* Conventional thinking.
* Scan from head to tail and use Stack to reserve the total.
*/
public static int romanToInt_2(String s) {
char[] str = s.toCharArray();
Stack <Integer>romanStack = new Stack<Integer>();
Map<Character, Integer> map = new HashMap<Character, Integer>();
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);
int num = 0;
romanStack.push(map.get(str[0]));
for (int i = 1; i < s.length() ; i++) {
if (map.get(str[i]) <= map.get(str[i - 1])) {
romanStack.push(map.get(str[i]));
} else {
romanStack.push(map.get(str[i])-romanStack.pop());
} // end if
} // end for
//Don't write "for(int I =0;I < romanStack. The size ();I++) ",
//because the stack size is fetched every time the loop occurs
int length = romanStack.size();
for(int i=0;i<length;i++) {
num += romanStack.pop();
}//end for
return num;
}// end romanToInt()
public static int romanToInt_3(String s) {
int num = 0;
for(int i=0;i<s.length();i++) {
char c = s.charAt(i);
if(c=='I') {num += 1;}
if(c=='V') {num += 5;}
if(c=='X') {num += 10;}
if(c=='L') {num += 50;}
if(c=='C') {num += 100;}
if(c=='D') {num += 500;}
if(c=='M') {num += 1000;}
}//end for
if(s.contains("IV")) {num -= 2;}
if(s.contains("IX")) {num -= 2;}
if(s.contains("XL")) {num -= 20;}
if(s.contains("XC")) {num -= 20;}
if(s.contains("CD")) {num -= 200;}
if(s.contains("CM")) {num -= 200;}
return num;
}// end romanToInt()
}// end RomanToInteger_13
Java实现LeetCode_0013_RomanToInteger的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
- 论:开发者信仰之“天下IT是一家“(Java .NET篇)
比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- Java多线程基础学习(二)
9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...
- Java多线程基础学习(一)
1. 创建线程 1.1 通过构造函数:public Thread(Runnable target, String name){} 或:public Thread(Runnable target ...
随机推荐
- 画结构图的神器 Graphviz
经常看到别人的论文里各种优美的图,没想过它们是怎么来的,前两天也是在看论文的时候被推荐了一款画图软件graphviz,稍微了解了一下这个画图软件,据说是贝尔实验室的几位牛人开发出来的,试了一下觉得很不 ...
- [CodeForces 300D Painting Square]DP
http://codeforces.com/problemset/problem/300/D 题意:每一次操作可以选一个正方形,令边长为n,如果n为奇数那么可以从中间画一个十字,分成4个大小相等的边长 ...
- [whu1568]dp优化
http://acm.whu.edu.cn/land/problem/detail?problem_id=1568 思路:先将所有数分解,得到2,3,5,7的个数,转化为用这些2,3,5,7" ...
- 安装Kibana出现的问题
安装Kibana出现的问题 前言 该问题的出现是在安装配置完成之后,也就是说下载好了kibana的相关包,在启动过程中出现的错误,该错误是在centos6的机器上引发的,是因为系统中的GLIBC_2. ...
- jstree 反选,测试400条数据左右有点卡
$("#reversecheckallmachines").on("change", function () { var checkedNodes = []; ...
- 下载Android代码
1.由于墙,无法下载android源码,但是又不想利用清华源repo下载整个工程,只下载个别仓库 解决办法: 2.下载frameworks/base: git clone https://androi ...
- npm WARN enoent ENOENT: no such file or directory
https://github.com/visionmedia/debug/issues/261
- Postgres的索引01
一.PG 9.3有以下索引类型 1.b-tree 1.1支持前导模糊查询,如xxx%或者^'xxx' 1.2忽略大小写字符前导模糊查询,如ILIKE 'XXX%'或者~*'^xxx' 1.3支持常见的 ...
- 可持续字典树 Perfect Security
题目链接 题目大意:给你两个序列,第二个序列可以任意进行排列变换,然后由这两个序列一一异或得到答案序列,要求答案序列的字典序最小. 可持续字典树与第K大可持续线段树的区别主要在于每个节点上 ,它多了一 ...
- 矩阵重叠面积计算 线段树hdu1542
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...