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

    » Solve this problem

    [解题思路]

     从前往后扫描,用一个临时变量记录分段数字。

     
    • 如果当前比前一个大,说明这一段的值应该是当前这个值减去上一个值。比如IV = 5 – 1
    • 否则,将当前值加入到结果中,然后开始下一段记录。比如VI = 5 + 1, II=1+1
     1 public static int romanToInt(String s) {
     2         // Start typing your Java solution below
     3         // DO NOT write main() function
     4         int result = 0;
     5         if (s == null || s.length() == 0) {
     6             return result;
     7         }
     8         for (int i = 0; i < s.length(); i++) {
     9             if (i > 0 && cToI(s.charAt(i)) > cToI(s.charAt(i - 1))) {
    10                 result += cToI(s.charAt(i)) - cToI(s.charAt(i - 1)) * 2;
    11             } else {
    12                 result += cToI(s.charAt(i));
    13             }
    14         }
    15 
    16         return result;
    17     }
    18 
    19     private static int cToI(char c) {
    20         switch (c) {
    21         case 'I':
    22             return 1;
    23         case 'V':
    24             return 5;
    25         case 'X':
    26             return 10;
    27         case 'L':
    28             return 50;
    29         case 'C':
    30             return 100;
    31         case 'D':
    32             return 500;
    33         case 'M':
    34             return 1000;
    35         default:
    36             return 0;
    37         }
    38     }
  • 相关阅读:
    select和epoll的区别
    Epoll导致的selector空轮询
    2.集合框架中的泛型有什么优点?
    java的语法基础(二)
    17-文本属性和字体属性
    15-浮动
    16-margin的用法
    14-块级元素和行内元素
    12-简单认识下margin
    day15 什么是递归/递归与回溯
  • 原文地址:https://www.cnblogs.com/feiling/p/3302287.html
Copyright © 2020-2023  润新知