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 ...
随机推荐
- HDU 2001 (水)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2001 题目大意:两个点求距离 解题思路: 套基本公式 a = √(b2 + c2); 小数点后几位的表 ...
- Linux vim 常用命令(不定时update)
1.退出 先esc 再:q 2.保存退出 先Esc 再:wq 3.强制退出 先Esc 再:q! 4.寻找关键字 先 shift+ 再/keyword 5.查看行数 set nu 6.跳到指定行(例如 ...
- js canvas压缩图片和jQuery ajax上传图片简单demo
原来用的插件,里面东西太乱了,一会jq,一会原生js,本来原生js就不熟,看起来更难受,而且感觉好多东西都是没用的,而且后端php转存文件一直不是很熟悉,正好一起整理一下.就是很简单的一个demo,如 ...
- android关机流程
关机过程的主要实现在ShutdownThread.java中在关机过程中,主要做了三件事:1.发送关机广播 有的模块可能需要监听手机关机事件,所以在关机时发送关机广播,通知相关模块处理.2.关闭一些主 ...
- java ->大的数据运算(BigInteger)
大数据运算 BigInteger java中long型为最大整数类型,对于超过long型的数据如何去表示呢.在Java的世界中,超过long型的整数已经不能被称为整数了,它们被封装成BigIntege ...
- 大话Ansible Ad-Hoc命令
Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. Ansible系列博文直达链接:Ansible入门系列 前言 通过前面的文章,大家 ...
- 挺好用的socks5库go-socks5
1.挺好用的socks5库 github.com/armon/go-socks5 2.示例代码 // Create a SOCKS5 server conf := &socks5.Config ...
- Colorful String
Colorful String #include <bits/stdc++.h> using namespace std; typedef long long ll; ; char s[m ...
- nginx配置之代理功能
nginx代理功能 至少需要两台主机: 代理机配置----如下: yum安装的/etc/nginx/nginx.conf location / { #服务机的ip端口 proxy_pass http: ...
- Java Number & Math类
java Number类 Java的内置数据类型有byte.int.long.double等. Java 语言为每一个内置数据类型提供了对应的包装类. int对应的包装类为Integer long对应 ...