leetcode Roman to Integer

主要思路就是如果每两个字符进行一次判断,如果左边的字符所代表的字符小于右边的字符,则返回右边-左边的值。

要注意最后一个字符特殊处理,因为可能溢出。

//

//  main.cpp

//  Integer to Roman

//

//  Created by zhukunjie on 14-7-8.

//  Copyright (c) 2014 zhukunjie. All rights reserved.

//


#include <iostream>

using namespace std;

inline int map(const 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;

    }

    

}

 int romanToInt(string s)  {

     

     int res=0;

     for(int i=0;i<s.length();i++)

     {

         if (i==(s.length()-1)) {

             res+=map(s[i]);

         }

         else{

         if (map(s[i])<map(s[i+1]))

            {res+=map(s[i+1])-map(s[i]);i++;}

             else res+=map(s[i]);

         }

     }

     return res;

}

int main(int argc, const char * argv[])

{


    // insert code here...

    std::cout << romanToInt("IX");

    return 0;

}


版权声明:本文为moyedamo原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。