[LeetCode]Roman to Integer

題目:

Roman to Integer

Given a roman numeral, convert it to an integer.

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

來源:http://oj.leetcode.com/problems/roman-to-integer/


思路:

Background:

首先,學習一下羅馬數字,參考羅馬數字

羅馬數字是最古老的數字表示方式,比阿拉伯數組早2000多年,起源於羅馬

羅馬數字有如下符號:
基本字符 I V X L C D M
對應阿拉伯數字 1 5 10 50 100 500 1000
計數規則:
  1. 相同的數字連寫,所表示的數等於這些數字相加得到的數,例如:III = 3
  2. 小的數字在大的數字右邊,所表示的數等於這些數字相加得到的數,例如:VIII = 8
  3. 小的數字,限於(I、X和C)在大的數字左邊,所表示的數等於大數減去小數所得的數,例如:IV = 4
  4. 正常使用時,連續的數字重複不得超過三次
  5. 在一個數的上面畫橫線,表示這個數擴大1000倍(本題只考慮3999以內的數,所以用不到這條規則)
羅馬數字轉阿拉伯數字規則(僅限於3999以內):
從前向後遍歷羅馬字母,從前向後遍歷羅馬數字,如果某個數比前一個數小,則加上該數。反之,減去前一個數的兩倍然後加上該數(因爲這裏是先加上之前的數了,所以如果之前數小於當前數,必須減去兩次)

C++ AC代碼:

class Solution {
public:
    int romanToInt( string s ) {
        int Integer = 0;
		for (int i = 0; i < s.size(); i++){
		     if (i > 0 && charToInt(s[i]) > charToInt(s[i-1])) 
			    Integer += charToInt(s[i])-2*charToInt(s[i-1]);
			else
			    Integer += charToInt(s[i]); 
		}
		return Integer;
    }
	
public:
    int charToInt( char c ) {
	    switch( c ) {
		case 'I':return 1;break;
        case 'V':return 5;break;
        case 'X':return 10;break;	
        case 'L':return 50;break;		
        case 'C':return 100;break;	
        case 'D':return 500;break;	
        case 'M':return 1000;break;		
        default:return 0;break;		
		}
	}
};

運行時間 352ms
發佈了55 篇原創文章 · 獲贊 9 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章