13. roman to integer

题目描述

给一串罗马数字,将其转换成整型。

题目分析

遍历所有字符,如果当前字符值大于后一字符值或者为最后一字符,
则当前和加上该字符值,否则当前值为倒装,向前遍历,不断翻转值。

代码

#include <iostream>

class Solution {
public:
  int romanToInt(std::string s) {
    int result = 0;
    for (unsigned i = 0; i < s.length(); ++i) {
      if ((i + 1 >= s.length() || i + 1 == 0) || choose(s[i]) >= choose(s[i+1])) {
        result += choose(s[i]);
        //std::cout << result << std::endl;
      } else {
        int flag = 1;
        unsigned j = i + 1;
        while (j < s.length() && j && choose(s[j-1]) < choose(s[j])) {
          flag *= -1;
          ++j;
        }
        result += flag * choose(s[i]);
      }
    }
    return result;
  }
  int choose(char c) {
    int rs = 0;
    switch (c) {
      case 'I': rs = 1;
                break;
      case 'V': rs = 5;
                break;
      case 'X': rs = 10;
                break;
      case 'L': rs = 50;
                break;
      case 'C': rs = 100;
                break;
      case 'D': rs = 500;
                break;
      case 'M': rs = 1000;
                break;
      default: rs = 0;
               break;
    }
    return rs;
  }
};

总结

1次AC