题目内容:

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

题目分析:罗马数字向阿拉伯数字的转换情况如下:

1、M=1000 D=500 C=100 L=50 X=10 V=5 I=1

2、若小的罗马符号出现在大的罗马符号的前面,则小的罗马符号代表的数字改为负。这种情况只能出现有限的情况。

因此目前想到两种方法。

第一种方法是再扫描出I之外的每个符号时都查看这个符号之前的符号,如果是比他小的符号,则要减去小的符号代表数值的两倍。

第二种方法是将数字中每个符合代表的数值都加上,然后查看数字中有没有出息要减去值的那些符号对。

题目代码:

public class Solution {
    public static int romanToInt(String s) {
        char[] ss = new char[100];
        int sum = 0;
        for(int i=0; i<s.length();i++)
        ss[i]=s.charAt(i);
        for(int i=0; i<s.length();i++){
         if (ss[i]=='I'){
          sum+=1;
         }
         if (ss[i]=='V'){
          sum+=5;
          if(i>0&&ss[i-1]=='I'){
           sum-=2;
          }
         }
         if (ss[i]=='X'){
          sum+=10;
          if(i>0&&ss[i-1]=='I'){
           sum-=2;
          }
          if(i>0&&ss[i-1]=='V'){
           sum-=10;
          }
         }
         if (ss[i]=='L'){
          sum+=50;
          if(i>0&&ss[i-1]=='I'){
           sum-=2;
          }
          if(i>0&&ss[i-1]=='V'){
           sum-=10;
          }
          if(i>0&&ss[i-1]=='X'){
           sum-=20;
          }
         }
         if (ss[i]=='C'){
          sum+=100;
          if(i>0&&ss[i-1]=='I'){
           sum-=2;
          }
          if(i>0&&ss[i-1]=='V'){
           sum-=10;
          }
          if(i>0&&ss[i-1]=='X'){
           sum-=20;
          }
          if(i>0&&ss[i-1]=='L'){
           sum-=100;
          }
         }
         if (ss[i]=='D'){
          sum+=500;
          if(i>0&&ss[i-1]=='I'){
           sum-=2;
          }
          if(i>0&&ss[i-1]=='V'){
           sum-=10;
          }
          if(i>0&&ss[i-1]=='X'){
           sum-=20;
          }
          if(i>0&&ss[i-1]=='L'){
           sum-=100;
          }
          if(i>0&&ss[i-1]=='C'){
           sum-=200;
          }
         }
         if (ss[i]=='M'){
          sum+=1000;
          if(i>0&&ss[i-1]=='I'){
           sum-=2;
          }
          if(i>0&&ss[i-1]=='V'){
           sum-=10;
          }
          if(i>0&&ss[i-1]=='X'){
           sum-=20;
          }
          if(i>0&&ss[i-1]=='L'){
           sum-=100;
          }
          if(i>0&&ss[i-1]=='C'){
           sum-=200;
          }
          if(i>0&&ss[i-1]=='D'){
           sum-=1000;
          }
         }
        }
        return sum;       
    }
   
}

13. Roman to Integer ★的更多相关文章

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

  2. Leetcode 13. Roman to Integer(水)

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

  3. leetCode练题——13. Roman to Integer

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

  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  ...

  5. 13. Roman to Integer【leetcode】

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

  6. 【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 ...

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

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

  8. LeetCode - 13. Roman to Integer - 思考if-else与switch的比较 - ( C++ ) - 解题报告

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

  9. 13. Roman to Integer[E]罗马数字转整数

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

  10. [LeetCode] 13. Roman to Integer 罗马数字转化成整数

    Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 ...

随机推荐

  1. cf C题

    题意:矩阵只包含0,1两种数字,给你一个矩阵A,另一个矩阵B,每一次可以从A中选出一个子矩阵,点击一次使得这个子矩阵的四个角的数字变成与原来相反的数,0变1,1变0.问你可不可以经过有限次的变换把矩阵 ...

  2. JS实现打开本地文件或文件夹 ActiveXObject

    IE浏览器打开C盘,测试可用. 如果浏览器报错提示:ActiveXObject is not defined Internet 选项 -> 安全 - >安全级别,调低级别 function ...

  3. Polly 重试策略

    工作原理 Retry 基本重试: public static void Retry() { var random = new Random(); // Policy<> 泛型定义返回值类型 ...

  4. Python 使用有道翻译

    最近想将一些句子翻译成不同的语言,最开始想使用Python向有道发送请求包的方式进行翻译. 这种翻译方式可行,不过只能翻译默认语言,不能选定语言,于是我研究了一下如何构造请求参数,其中有两个参数最复杂 ...

  5. oracle基本查询

  6. Jvm类的加载机制

    1.概述 虚拟机加载Class文件(二进制字节流)到内存,并对数据进行校验.转换解析和初始化,最终形成可被虚拟机直接使用的Java类型,这一系列过程就是类的加载机制. 2.类的加载时机 类从被虚拟机加 ...

  7. threejs 草场足球运动视角(三)

    这次要模拟的场景如下图:就是在绿草地上足球的运动,并且视角会随着足球的运动发生变化,同时整个草地的视角也会旋转. 接下来,我们就对各个元素进行分析: 1,草地 用PlaneGeometry在三维空间里 ...

  8. SSH无法连接到服务器

    SSH服务器会无法连接,有时候并不是密码的问题,可能由于你上次改了密码(就算改成跟上次一样也是一个效果)导致家目录下的known_hosts(/root/.ssh/known_hosts)不一样了并且 ...

  9. _spellmod_base

    技能基础修改(进去可能会改动) 可以配合数据库的spell_dbc在线制作无补丁技能. 具体效果查询DBC表 `spellid` int(11) NOT NULL DEFAULT '0', `Effe ...

  10. libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)

    In Xcode 9 and Swift 4: Print exception stack to know the reason of the exception: Go to show break ...