【LeetCode算法-13】Roman to Integer
LeetCode第13题
Roman numerals are represented by seven different symbols: I, V, X, L, C, D 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:
Ican be placed beforeV(5) andX(10) to make 4 and 9.Xcan be placed beforeL(50) andC(100) to make 40 and 90.Ccan be placed beforeD(500) andM(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的更多相关文章
- 【算法】LeetCode算法题-Roman To Integer
		
这是悦乐书的第145次更新,第147篇原创 今天这道题和罗马数字有关,罗马数字也是可以表示整数的,如"I"表示数字1,"IV"表示数字4,下面这道题目就和罗马数 ...
 - 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 ...
 - 【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 ...
 - 《LeetBook》leetcode题解(13):Roman to Integer[E]
		
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
 - 【一天一道LeetCode】#13. Roman to Integer
		
一天一道LeetCode系列 (一)题目 Given a roman numeral, convert it to an integer. Input is guaranteed to be with ...
 - LeetCode题解(13)--Roman to Integer
		
https://leetcode.com/problems/roman-to-integer/ 原题: Given a roman numeral, convert it to an integer. ...
 - 【LeetCode】13. Roman to Integer 罗马数字转整数
		
题目: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from ...
 - 【leetcode】13. Roman to Integer
		
题目描述: Given a roman numeral, convert it to an integer. 解题分析: 这道题只要百度一下转换的规则,然后着这解释写代码即可.实现上并没有什么难度,直 ...
 - 「Leetcode」13. Roman to Integer(Java)
		
分析 把具体的情况一个一个实现即可,没有什么幺蛾子. 代码 class Solution { public int romanToInt(String s) { int ans = 0; for (i ...
 - 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 ,即 ...
 
随机推荐
- swift 实践- 11 -- UISlider
			
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoa ...
 - 关于vue的基础概念
			
vue-cli相当于脚手架 给你自动生成模板工程vue-router是 vue路由插件 支持你单页应用的vue-loader是webpack下loader插件 可以把.vue文件 输出成组件
 - mysql 视图  触发器  事物 存储过程 函数 流程控制
			
1.视图 *** 视图是有一条sql语句的查询结果构成的虚拟表 其不是物理存在的 使用方式与普通表相同 视图的作用1.简化sql语句的编写 2.限制可以查看的数据 可以使用权限来完成 权限某一个库 的 ...
 - Software tips
			
1.Microsoft office professional plus 2013秘钥 PD3W7-NVGG7-YKGQX-7CRDG-J2MG7(test success)MTGRC-8BM6H-W ...
 - 使用gulp进行代码压缩
			
gulp是一个很不错的前端自动化工具,可以帮我们完成一些重复性操作,比如html.css和js代码的压缩.合并.混淆等,虽然这些操作可以通过一些在线工具帮我们实现,但不断重复地复制粘贴肯定比不上一句命 ...
 - CF558E
			
非常好的一道题,是线段树的常见玩法 将字符串转化为1~26个数 对区间开一棵线段树,用两个数组分别维护区间中1~26每个数的个数以及一个区间覆盖标记,表示这个区间是否被某一个值覆盖了 在每次排序时,首 ...
 - C语言将字符串转json
			
示例代码: #include <stdio.h> #include <string.h> #include <stdlib.h> char *strrpc(char ...
 - tomcat启动报错:Annotation-specified bean name 'patrolTrailServiceImpl' for bean class [cn.oppo.inventoryService.patrolTrailServiceImpl] con
			
注释-为bean类[目录服务patrolTrailServiceImpl]指定的bean名称“patrolTrailServiceImpl”与同名和[目录服务patrolTrailServiceImp ...
 - 利用SVD-推荐未尝过的菜肴
			
推荐未尝过的菜肴-基于物品相似度的推荐 推荐系统的工作过程:给定一个用户,系统会为此用户返回N个最好的推荐菜 1. 寻找用户没有评级的菜肴,即在用户-物品矩阵中的0值 2. 在用户没有评级的所有物品中 ...
 - views.py视图函
			
views.py视图函数来自 urls 的映射关系 常用所需模块 from django.shortcuts import render # ****** 渲染 render 跳转到指定的 url.h ...