题目内容:

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. freeswitch reloadxml 出错

    1.修改fs配置文件后,reloadxml控制台上报错误. 2,控制台日志显示 error near line 7301]:missing>] 查询 log 下的 freeswitch.xml. ...

  2. speech

    1.李开复:一个人的成功,15%靠专业知识,其余15%人际沟通,公众演讲,以及影响他人的能力 2.演讲是一门遗憾的艺术 3.没有准备就等于准备失败 4.追求完美,就是在追求完蛋 5.宁可千日无机会,不 ...

  3. SpringBoot后台接收前台的字符串数据

    需求 将前台传入的字符串数据转为int类型. 操作 在pom.xml中添加引用. <dependency> <groupId>org.apache.commons</gr ...

  4. ArcGIS Pro开发Web3D应用(2)——地图分屏对比(多屏对比)思路

    很多应用中都需要用到地图联动.多屏对比.二三维分屏.大屏显示,有图形可视化的地方就有事件响应触发:鼠标按下.移动.鼠标滚轮,由此触发了地图上坐标或范围的变化,将这些变化发送给另一个地图并响应这些变化, ...

  5. System.InvalidOperationException:“线程间操作无效: 从不是创建控件“btnSearch”的线程访问它。

    System.InvalidOperationException:“线程间操作无效: 从不是创建控件“btnSearch”的线程访问它.”这个问题属于跨线程问题 在Form1重载中写上一行代码 Sys ...

  6. 实验八 <FBG> 基于原型的团队项目需求调研与分析

    <FBG>团队项目原型设计:http://www.cnblogs.com/ymm3/p/9012534.html GitHub的链接地址:https://github.com/FBGfbg ...

  7. 【原】git常见用法

    1.克隆 当前用户:git clone 192.165.53.15:/home/git/repo/Tegra/bsp/tx1_filesystem.git/ 非当前用户:git clone xxxxx ...

  8. Kafka+OpenCV 实现实时流视频处理

     1. 启动Kafka Server bin/kafka-server-start.sh config/server.properties & 2. 创建一个新topic bin/kafka- ...

  9. 用node.js启动mock.js

    Node.js Node 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP.Python.Perl.Ruby 等服务端语言平起平坐的脚本语言.官网下载n ...

  10. Django web框架-----win10搭建django2.1.7开发环境,定义简易视图及网址

    ① 安装Django 使用pip命令或者pycharm setting的project Interpreter工具添加安装 检查是否安装成功,以下命令无报错即成功: 查看安装的Django版本号的两种 ...