程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> LeetCode -- Roman to Integer

LeetCode -- Roman to Integer

編輯:C++入門知識

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.


就是把羅馬數字轉化為整數。


1. 首先要了解羅馬數字對應的整數:
字符 I V X L C D M
數字 1 5 10 50 100 500 1000


2.轉換規則
在羅馬字符串s中,對於s[i]和s[i+1],如果s[i+1]數字小,則整數為s[i]+s[i+1],否則:
如果s[i+1]比s[i]大,則s[i]與s[i+1]表示s[i+1]-s[i]。


思路:
遍歷羅馬字符串s,一一映射為字符,total初始化為s[0],i∈[0,n),比較s[i]和s[i+1],如果後面大則直接累加s[i+1];否則把減去s[i]的二倍並加上當前數s[i+1]。




實現代碼:

public class Solution {
    public int RomanToInt(string s) 
    {
       if(string.IsNullOrEmpty(s))
       {
    		return 0;
    	}
    	
    	var len = s.Length;
    	var result = Convert(s[0]);
    	if(len < 2){
    		return result;
    	}
    	for(var i = 1;i < len; i++){
    		var pre = Convert(s[i - 1]);
    		var current = Convert(s[i]);
    		
    		if(current <= pre){
    			result += current;
    		}else{
    			result = result - 2 * pre + current;
    		}
    	}
    	
    	return result;
    }
	
private int Convert(char c) 
{
	switch (c) {
		case 'I':  
			return 1;
		case 'V':
			return 5;
		case 'X':  
			return 10;  
		case 'L':  
			return 50;  
		case 'C':  
			return 100;  
		case 'D':  
			return 500;  
		case 'M':  
			return 1000;  
		default : 
			throw new ArgumentException();
	}
}
}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved