public class Solution
{
private int ChangeToInt(char c)
{
var number = ;
string s = c.ToString();
switch (s)
{
case "I":
number = ;
break;
case "V":
number = ;
break;
case "X":
number = ;
break;
case "L":
number = ;
break;
case "C":
number = ;
break;
case "D":
number = ;
break;
case "M":
number = ;
break;
default:
number = ;
break;
}
return number;
} private int[] CalculateRange(int num)
{
int[] ary = new int[];
if (num == )
{
ary[] = ;
ary[] = ;
}
else if (num == )
{
ary[] = ;
ary[] = ;
}
else if (num == )
{
ary[] = ;
ary[] = ;
}
else if (num == )
{
ary[] = ;
ary[] = ;
}
else if (num == )
{
ary[] = ;
ary[] = ;
}
else if (num == )
{
ary[] = ;
ary[] = ;
}
else if (num == )
{
ary[] = ;
ary[] = ;
} return ary;
} public int RomanToInt(string s)
{
//重复数次:一个罗马数字重复几次,就表示这个数的几倍。
//右加左减:在一个较大的罗马数字的右边记上一个较小的罗马数字,表示大数字加小数字。
//在一个较大的数字的左边记上一个较小的罗马数字,表示大数字减小数字。
//但是,左减不能跨越等级。比如,99不可以用IC表示,用XCIX表示。
//加线乘千:在一个罗马数字的上方加上一条横线或者在右下方写M,表示将这个数字乘以1000,即是原数的1000倍。
//同理,如果上方有两条横线,即是原数的1000000倍。
//单位限制:同样单位只能出现3次,如40不能表示为XXXX,而要表示为XL。 var list = new List<int>();//用于存放每组的初始数据
var list2 = new List<int>();//用于存放每组的计算结果,用于最终计算
var lastnum = ;
for (int i = ; i < s.Length; i++)
{
var c = s[i];
var num = ChangeToInt(c);
if (lastnum == )//存储第一个值
{
lastnum = num;
list.Add(num);
}
else//第一个值之后的值
{
if (num <= lastnum)//当前的值,比之前的值小,可以放在右边
{
//list中的值可以放入list2
lastnum = num;
var partsum = ;
for (int j = ; j < list.Count; j++)
{
partsum += list[j];
}
list2.Add(partsum); list.Clear();
list.Add(num); }
else
{
//出现了左小,进行减法
var partsum = ;
for (int j = ; j < list.Count; j++)
{
partsum += list[j];
}
partsum = num - partsum;
list.Clear();
list.Add(partsum);
lastnum = partsum;
}
}
} if (list.Any())//处理最后一部分的值
{
var partsum = ;
for (int j = ; j < list.Count; j++)
{
partsum += list[j];
}
list2.Add(partsum);
list.Clear();
} var result = ;
foreach (var d in list2)
{
result += d;
}
Console.WriteLine(result);
return result;
}
}

https://leetcode.com/problems/roman-to-integer/#/description

leetcode13的更多相关文章

  1. leetcode-13罗马字符转整数

    leetcode-13罗马字符转整数 算法:转换的规律是先逐字符按照对应的阿拉伯数字累加,然后对于特殊的(I.X.C出现在左侧)要处理.处理方法:出现特殊字符组合减去双倍的左侧字符(在开始的处理中已经 ...

  2. 罗马数字转整数Leetcode13

    该题较为简单,但是需要知道罗马数字的表示以及取值.用了一下map,其实之前没用过,但仔细看了一下跟python的字典实际上差不多,扫了一遍函数就直接可以用了. class Solution { pub ...

  3. LeetCode13 Roman to Integer

    题意: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from ...

  4. [Swift]LeetCode13. 罗马数字转整数 | Roman to Integer

    Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 ...

  5. LeetCode13.罗马数字转整数

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并 ...

  6. LeetCode-13. Roman to Integer(罗马数字转阿拉伯数字)

    1.题目描述 Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range f ...

  7. LeetCode13.罗马数字转整数 JavaScript

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并 ...

  8. leetcode-13双周赛-1256-加密数字

    题目描述:编码 方法一: class Solution(object): def encode(self, n): if n == 0: return "" n -= 1 A = ...

  9. leetcode-13双周赛-1257-最小公共区域

    题目描述: 方法: class Solution(object): def findSmallestRegion(self, regions, region1, region2): parent = ...

随机推荐

  1. 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.3 定时器

    定时器 规则用基于 interval(间隔)和cron的定时器(timer),替代了被标注过时的duration 属性.timer属性的使用示例: timer ( int: <initial d ...

  2. [团队项目]SCRUM项目6.0 7.0

    6.0----------------------------------------------------- sprint演示 1.坚持所有的sprint都结束于演示. 团队的成果得到认可,会感觉 ...

  3. stenciljs 学习三 组件生命周期

    stenciljs 组件包含好多生命周期方法, will did load update unload 实现生命周期的方法比价简单类似 componentWillLoad ....,使用typescr ...

  4. log4net保存到数据库系列五、新增数据库字段

    园子里面有很多关于log4net保存到数据库的帖子,但是要动手操作还是比较不易,从头开始学习log4net数据库日志一.WebConfig中配置log4net 一.WebConfig中配置log4ne ...

  5. cocos2dx学习资料

    [9秒原创]cocos2d-x——CCScrollView用法 http://www.9miao.com/thread-45619-1-1.html [9秒原创]cocos2d-x——场景切换效果示例 ...

  6. Linux 安装Jdk、mysql、apache、php、tomcat、nginx

    Jdk 安装分三步:第一步,上传跟 linux 位数相同的 jdk tar 包,解压:第二步:解压 tar 包,配置环境变量,且 source 一下 /etc/profile:第三步:检查版本 第一步 ...

  7. nyoj 数独

    数独 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 数独是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一 ...

  8. Erlang

    Erlang The Erlang BEAM Virtual Machine Specificationhttp://www.cs-lab.org/historical_beam_instructio ...

  9. 阿里巴巴Java开发手册-命名规约

    1. [强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.反例: _name / __name / $Object / name_ / name$ / Object$2. ...

  10. WF4.0 基础篇 (一)开始使用WF

    来源:https://www.cnblogs.com/caosenianhuan/p/WF.html 最近公司要重新上线一套新的CRM系统,要重整老系统里的业务流模块,团队讨论已微软的workflow ...