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的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  3. Elasticsearch之java的基本操作一

    摘要   接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...

  4. 论:开发者信仰之“天下IT是一家“(Java .NET篇)

    比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...

  5. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  6. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  7. 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

    有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...

  8. Java多线程基础学习(二)

    9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...

  9. Java多线程基础学习(一)

    1. 创建线程    1.1 通过构造函数:public Thread(Runnable target, String name){}  或:public Thread(Runnable target ...

随机推荐

  1. [POJ1038]状压DP

    题意:给一个n*m的区域,里面有一些障碍物,往里面放2*3和3*2的矩形,矩形之间不能重叠,不能覆盖到障碍物,求能放置的最大个数.(n<=150,m<=10) 思路:看到m=10就应该往状 ...

  2. ssh chroot 设置

    目的 让特定的用户登录linux服务器后,对其操作权限进行限制: 不能使用任何方式杀掉服务器现有的进程 最好只能查看相关的目录和文件 最好只能运行特定的命令,比如cat.ls.tail等 场景模拟 一 ...

  3. Mysql常用sql语句(22)- insert 插入数据

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 终于讲完基础的查询语句了...这篇讲的就是插入数 ...

  4. Python格式化字符串(格式化输出)

    熟悉C语言 printf() 函数的读者能够轻而易举学会 Python print() 函数,它们是非常类似的. print() 函数使用以%开头的转换说明符对各种类型的数据进行格式化输出,具体请看下 ...

  5. BZOJ1077 并查集

    1077: [SCOI2008]天平 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 416  Solved: 224[Submit][Status][ ...

  6. python小练习-列表、字典

    1. 切片(Slice) L=['a','b','c','d'] L[0:2]表示从索引0开始取,直到索引2为止,但不包括索引2.即索引0,1,正好是2个元素 如果第一个索引是0,还可以省略: L[: ...

  7. JS中的bind 、call 、apply

    # 一 .bind 特点: ### 1.返回原函数的拷贝,我们称这个拷贝的函数为绑定函数 ### 2.将函数中的this固定为调用bind方法时的第一个参数,所以称之为绑定函数.注意是名词而非动词. ...

  8. 【IOS】点击按钮-去高亮-加点击效果

    (1)前提:html页面 ,手机端, (2)问题一: 在iphone上(貌似是9以后..),给div/span/...等元素上加onclick事件,根本不起作用,这是为啥捏? -- 在元素上加  cu ...

  9. 0515项目优化和List集合

    0515项目优化和List集合 1. 项目优化 1.1 分析当前情况 问题 数据存储是数组形式,数据类型明确.复用度较低. 需求 Student操作使用的代码,StudentManager想要操作考虑 ...

  10. MySQL常用控制台指令

    MySQL服务的启用与停止 MySQL服务的启用: net start mysql80 MySQL服务的停止: net stop mysql80 MySQL的登入与退出 数据库的登入: mysql - ...