zoukankan      html  css  js  c++  java
  • Leetcode-Roman to Integer

    Given a roman numeral, convert it to an integer.

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

    Solution:

     1 public class Solution {
     2     public int romanToInt(String s) {
     3         if (s.length()==0) return 0;
     4 
     5         Map<Character,Integer> map = new HashMap<Character,Integer>();
     6         map.put('I',1);
     7         map.put('V',5);
     8         map.put('X',10);
     9         map.put('L',50);
    10         map.put('C',100);
    11         map.put('D',500);
    12         map.put('M',1000);
    13         
    14         int res = 0;
    15         int index = 0;
    16         while (index<s.length()){
    17             char cur = s.charAt(index);
    18             if (index+1<s.length()){
    19                 char next = s.charAt(index+1);
    20                 int val1 = map.get(cur);
    21                 int val2 = map.get(next);
    22                 if (val1<val2){
    23                     res += (val2-val1);
    24                     index += 2;
    25                 } else {
    26                     res += val1;
    27                     index++;
    28                 }
    29             } else {
    30                 int val = map.get(cur);
    31                 res += val;
    32                 index++;
    33             }
    34         }
    35 
    36         return res;       
    37     }
    38 }

     Solution 2:

    Whenever the value of char i is smaller than the value of char i+1, then the value of char i should be reduced from the sum.

     1 public class Solution {
     2     public int romanToInt(String s) {
     3         Map<Character,Integer> map = new HashMap<Character,Integer>();
     4         map.put('I',1);
     5         map.put('V',5);
     6         map.put('X',10);
     7         map.put('L',50);
     8         map.put('C',100);
     9         map.put('D',500);
    10         map.put('M',1000);
    11        
    12         int sum = 0;
    13         for (int i=0;i<s.length()-1;i++){
    14             char c = s.charAt(i);
    15             int val = map.get(c);
    16             if (c=='I' || c=='X' || c=='C'){
    17                 char next = s.charAt(i+1);
    18                 int val2 = map.get(next);
    19                 if (val<val2) val = -val;
    20             }
    21 
    22             sum += val;
    23         }
    24         char c = s.charAt(s.length()-1);
    25         sum += map.get(c);
    26         return sum;
    27     }
    28 }
  • 相关阅读:
    中国跨境电商物流难题的三大解决方案
    美团外卖实时数仓建设实践
    美团商品知识图谱的构建及应用
    c++动态创建二维数组
    小鱼儿fish C#获取数组大小
    C#中定义数组--字符串及数组操作
    warning LNK4070的解决办法
    C++ 中 ZeroMemory、memset 危险需慎用
    C++中new和delete来创建和释放动态数组
    VS调试时查看动态数组的全部元素
  • 原文地址:https://www.cnblogs.com/lishiblog/p/4130395.html
Copyright © 2011-2022 走看看