[leetcode]13. 罗马数字转整数

孤街醉人 提交于 2019-12-23 05:39:54

题目:[leetcode]13. 罗马数字转整数
罗马数字和整数转换

/* 作者: rentingsong
* 思路:
*    1、使用map映射罗马数字对应的整数值
*    2、使用for循环,从字符串s的第一个字符开始,和右相邻的字符进行与逻辑判断,
*      如果符合特殊情况,按特殊情况处理,并使i加1,这样子是为了跳过下一个字符,因为计算过了嘛;
*      如果不符合特殊情况,直接加上这个字符对应的整数。       
*    3、有一个难处理的是,当i=s.length()-1时,如果再和下一位比较,会出现越位,所以让i < s.length() - 1,
*       来处理不越位的情况,最后一位单独处理。处理方法是设置一个标志位flag,
*       如果flag=0,表示最后两位是特殊情况,直接返回结果res;
*       如果flag=1,表示最后两位是正常情况,需要加上最后一位,然后返回结果res。
*/
#include<iostream>
#include<map>
using namespace std;
class Solution {
    public:	
	int romanToInt(string s) { // 字符映射整数        
	map<char, int> letterToInt;        
	letterToInt['I'] = 1;        
	letterToInt['V'] = 5;        
	letterToInt['X'] = 10;        
	letterToInt['L'] = 50;        
	letterToInt['C'] = 100;        
	letterToInt['D'] = 500;        
	letterToInt['M'] = 1000;
        int res = 0;        
        bool flag = 0; // 设立标志位,单独处理最后一位,0:特殊情况 1:正常情况        
        for(int i = 0; i < s.length(); i++) {            
            if (i < s.length() - 1) { // 用条件控制不越位的情况,最后两位是特殊情况会在这个条件下处理                
                if ( i == s.length() - 2) { // 如果是倒数第二位,设立标志位为1,默认为最后两位是正常情况                    
                    flag = 1;                
                }                
                if (s[i] == 'I' && s[i + 1] == 'V') {
                    res = res + 4;                    
                    i = i + 1;                    
                    flag = 0; //特殊情况置为0     
                    continue;            
                } else if (s[i] == 'I' && s[i + 1] == 'X') {
                    res = res + 9;                  
                    i = i + 1;                    
                    flag = 0; //特殊情况置为0             
                    continue;                
                } else if (s[i] == 'X' && s[i + 1] == 'L') {
                    res = res + 40;                    
                    i = i + 1;                    
                    flag = 0; //特殊情况置为0    
                    continue;                
                } else if (s[i] == 'X' && s[i + 1] == 'C') {
                    res = res + 90;                   
                    i = i + 1;                 
                    flag = 0; //特殊情况置为0  
                    continue;                
                } else if (s[i] == 'C' && s[i + 1] == 'D') {
                    res = res + 400;                    
                    i = i + 1;                    
                    flag = 0; //特殊情况置为0              
                    continue;                
                } else if (s[i] == 'C' && s[i + 1] == 'M') {
                    res = res + 900;                    
                    i = i + 1;                    
                    flag = 0; //特殊情况置为0 
                    continue;                
                } else {
                    res = res + letterToInt[s[i]];
                    flag = 1; //正常情况置为1  
                    continue;              
                }         
          }          
          if (flag = 1){ // 根据flag判断最后一位如果是正常情况,res加上最后一位                
            res = res + letterToInt[s[s.length() - 1]];
          }
                        
      }      
      return res;   
  }
};
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!