LeetCode第13题

Roman numerals are represented by seven different symbols: IVXLCD and M.

Symbol       Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000

For example, two is written as II in Roman numeral, just two one's added together. Twelve is written as, XII, which is simply X + II. The number twenty seven is written as XXVII, which is XX + V + II.

Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:

  • I can be placed before V (5) and X (10) to make 4 and 9.
  • X can be placed before L (50) and C (100) to make 40 and 90.
  • C can be placed before D (500) and M (1000) to make 400 and 900.

Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999.

Example 1:

Input: "III"
Output: 3

Example 2:

Input: "IV"
Output: 4

Example 3:

Input: "IX"
Output: 9

Example 4:

Input: "LVIII"
Output: 58
Explanation: C = 100, L = 50, XXX = 30 and III = 3.

Example 5:

Input: "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

废话不多说,直接上代码,姿势一定要好看

class Solution {
private int[] num;
public int romanToInt(String s) {
//先将罗马字母转为数字
stringToNum(s);
//检查左小右大的情况
checkLeftDigit();
//求和
int sum = 0;
for(int l = 0;l<num.length;l++){
sum+=num[l];
}
return sum;
} public void stringToNum(String s){
num = new int[s.length()];
for(int i=0;i<s.length();i++){
switch(s.charAt(i)){
case 'I':
num[i]=1;
break;
case 'V':
num[i]=5;
break;
case 'X':
num[i]=10;
break;
case 'L':
num[i]=50;
break;
case 'C':
num[i]=100;
break;
case 'D':
num[i]=500;
break;
case 'M':
num[i]=1000;
break;
default:
num[i]=0;
break;
}
}
} public void checkLeftDigit(){
for(int j = 0;j<num.length;j++){
for(int k = j+1;k<num.length;k++){
if(num[j]==1 &&(num[k]==5 || num[k]==10)){
num[j] *= (-1);
}else if(num[j]==10 &&(num[k]==50 || num[k]==100)){
num[j] *= (-1);
}else if(num[j]==100 &&(num[k]==500 || num[k]==1000)){
num[j] *= (-1);
}
}
}
}
}

1.因为是手写,api会写错,String的长度是length()不是length;数组的长度是length不是size()

2.一开始我考虑会不会有IXC(109?91?89?)的情况,后来审题发现罗马字母正常情况左大右小,何况109是CIX,91是XCI,89是LXXXIX;所以不会有IXC的情况,就不用判断了

3.其实Char也能通过ASCII来判断大小和差值,不过最后还是要转成INT相加,所以我就先转成INT了

【LeetCode算法-13】Roman to Integer的更多相关文章

  1. 【算法】LeetCode算法题-Roman To Integer

    这是悦乐书的第145次更新,第147篇原创 今天这道题和罗马数字有关,罗马数字也是可以表示整数的,如"I"表示数字1,"IV"表示数字4,下面这道题目就和罗马数 ...

  2. C# 写 LeetCode easy #13 Roman to Integer

    13.Roman to Integer Roman numerals are represented by seven different symbols: I, V, X, L, C, D and  ...

  3. 【LeetCode】13. Roman to Integer (2 solutions)

    Roman to Integer Given a roman numeral, convert it to an integer. Input is guaranteed to be within t ...

  4. 《LeetBook》leetcode题解(13):Roman to Integer[E]

    我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...

  5. 【一天一道LeetCode】#13. Roman to Integer

    一天一道LeetCode系列 (一)题目 Given a roman numeral, convert it to an integer. Input is guaranteed to be with ...

  6. LeetCode题解(13)--Roman to Integer

    https://leetcode.com/problems/roman-to-integer/ 原题: Given a roman numeral, convert it to an integer. ...

  7. 【LeetCode】13. Roman to Integer 罗马数字转整数

    题目: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from ...

  8. 【leetcode】13. Roman to Integer

    题目描述: Given a roman numeral, convert it to an integer. 解题分析: 这道题只要百度一下转换的规则,然后着这解释写代码即可.实现上并没有什么难度,直 ...

  9. 「Leetcode」13. Roman to Integer(Java)

    分析 把具体的情况一个一个实现即可,没有什么幺蛾子. 代码 class Solution { public int romanToInt(String s) { int ans = 0; for (i ...

  10. 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 ,即 ...

随机推荐

  1. LuoGu P1541 乌龟棋

    题目传送门 乌龟棋我并不知道他为啥是个绿题0.0 总之感觉思维含量确实不太高(虽然我弱DP)(毛多弱火,体大弱门,肥胖弱菊,骑士弱梯,入侵弱智,沙华弱Dp) 总之,设计出来状态这题就很简单了 设 f[ ...

  2. LuoGu P2735 电网 Electric Fences

    题目传送门 这个东西,本来我是用求出两条一次函数解析式然后判断在x坐标下的y坐标值来做的 首先因为没考虑钝角三角形,WA了 然后又因为精度处理不好又WA了 一气之下,只能去网上查了查那个皮克定理 首先 ...

  3. |"|&|<|>等html字符转义

    本文来源:d4shman  <&nbsp|&quot|&amp|&lt|&gt等html字符转义> 提示:请直接按CTRL+F搜索您要查找的转义字符 ...

  4. java对之前的复习

    日期:2018.7.29 星期日 博客期:003 我知道我实在是不想写博客,因为要做很多的准备啊!因为还要准备靠驾驶本,所以两边都要学!要不这次来总结总结驾驶员知识?还是算了吧!今天来总结一下学到的J ...

  5. linux 将自己的服务添加到系统service服务

    前言 我们在linux上要启动一个程序得时候, 往往都是要写一堆路径, 找到要启动得服务程序, 再用 ./*** 启动服务. 那么我们有没有快速启动方法吗, 答案是肯定得 service 介绍 官方介 ...

  6. Redis创建集群报错

    Redis创建集群报错: 1:任何一个集群节点中都不能存在数据,如果有备份一下删除掉aof文件或rdb文件 2: nodes-集群端口.conf 文件存的会有报错记录,所以该文件也要删除

  7. MySQL修改数据表存储引擎的3种方法介绍

    这篇文章主要介绍了MySQL修改数据表存储引擎的3种方法介绍,分别是直接修改.导出导入.创建插入3种方法, 可以参考下   MySQL作为最常用的数据库,经常遇到各种各样的问题.今天要说的就是表存储引 ...

  8. IDEA加载项目的设置是tomcat

  9. Tomcat使用

    打开Tomcat官网 在浏览器地址栏输入: tomcat.apache.org,按回车 下载Tomcat 把目光移动至网页左边红匡处,点击Tomcat8 网页下移 点击箭头所指的链接 运行Tomcat ...

  10. 网络安全:robots.txt防止向黑客泄露后台地址和隐私目录的写法

    做优化的朋友都知道网站的robots的目的是让搜索引擎知道我们网站哪些目录可以收录,哪些目录禁止收录.通常情况蜘蛛访问网站时,会首先检查你的网站根目录是否有robots文件,如果有,则会根据此文件来进 ...