1. 程式人生 > >Leetcode演算法練習-easy篇-Roman to Integer

Leetcode演算法練習-easy篇-Roman to Integer

題目簡述:

Given a roman numeral, convert it to an integer.

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

上圖:

這裡寫圖片描述

本題解法:

int retValue(char a)
{
    if(a == 'M')
        return 1000;
    if(a == 'D')
        return 500;
    if(a == 'C')
        return 100;
    if(a == 'L')
        return
50; if(a == 'X') return 10; if(a == 'V') return 5; if(a == 'I') return 1; } int retPra(char a) { int ret = 0; if(a == 'M'){ ret = 7; goto End; } if(a == 'D'){ ret = 6; goto End; } if(a == 'C'){ ret = 5
; goto End; } if(a == 'L'){ return 4; goto End; } if(a == 'X'){ ret = 3; goto End; } if(a == 'V'){ ret = 2; goto End; } if(a == 'I'){ ret = 1; goto End; } End : return ret; } class Solution { public
: int romanToInt(string s) { int ret = 0; int s1 = 0, s2 = 0; for(int i = 0; i < s.length(); i++) { s1 = retPra(s[i]); s2 = retPra(s[i + 1]); if(s1 < s2) { ret += retValue(s[i + 1]) - retValue(s[i]); i++; } else ret += retValue(s[i]); } return ret; } };

然後就是再來看一下比較好的解法:
7msJAVA解法

 public int romanToInt(String s) {
    int nums[]=new int[s.length()];
    for(int i=0;i<s.length();i++){
        switch (s.charAt(i)){
            case 'M':
                nums[i]=1000;
                break;
            case 'D':
                nums[i]=500;
                break;
            case 'C':
                nums[i]=100;
                break;
            case 'L':
                nums[i]=50;
                break;
            case 'X' :
                nums[i]=10;
                break;
            case 'V':
                nums[i]=5;
                break;
            case 'I':
                nums[i]=1;
                break;
        }
    }
    int sum=0;
    for(int i=0;i<nums.length-1;i++){
        if(nums[i]<nums[i+1])
            sum-=nums[i];
        else
            sum+=nums[i];
    }
    return sum+nums[nums.length-1];
}

比較高效的部分應該就是直接生成陣列,並在陣列中進行比較加減。

總結:本次採用C++實現,有意思的部分就是羅馬數字的排列方式了,在下面附的是羅馬數字的排列規則:(來自百度)

1-10就是: I II III IV V VI VII VIII IX X .
就是一個I代表一根手指表示1.
兩個當然就是2.然後V表示的就是一隻手也就是5.
然後放在大數左邊的小數是減,如IV是4.
放在大數右邊的小數是加如VI是6.
然後X表示兩隻手也就是10.剩下的就跟阿拉伯數字一樣組合起來就好了.
20是XX 30是XXX 因為50是L,所以40是XL.然後60LX 70LXX 80LXXX 100是C.所以90是XC.然後十位和個位組合就好了.再附個表

數字排列表格