zoukankan      html  css  js  c++  java
  • leetcode13

    public class Solution
        {
            private int ChangeToInt(char c)
            {
                var number = 0;
                string s = c.ToString();
                switch (s)
                {
                    case "I":
                        number = 1;
                        break;
                    case "V":
                        number = 5;
                        break;
                    case "X":
                        number = 10;
                        break;
                    case "L":
                        number = 50;
                        break;
                    case "C":
                        number = 100;
                        break;
                    case "D":
                        number = 500;
                        break;
                    case "M":
                        number = 1000;
                        break;
                    default:
                        number = 0;
                        break;
                }
                return number;
            }
    
            private int[] CalculateRange(int num)
            {
                int[] ary = new int[2];
                if (num == 1)
                {
                    ary[0] = 1;
                    ary[1] = 10;
                }
                else if (num == 5)
                {
                    ary[0] = 1;
                    ary[1] = 10;
                }
                else if (num == 10)
                {
                    ary[0] = 1;
                    ary[1] = 100;
                }
                else if (num == 50)
                {
                    ary[0] = 10;
                    ary[1] = 100;
                }
                else if (num == 100)
                {
                    ary[0] = 10;
                    ary[1] = 1000;
                }
                else if (num == 500)
                {
                    ary[0] = 100;
                    ary[1] = 1000;
                }
                else if (num == 1000)
                {
                    ary[0] = 100;
                    ary[1] = 1000;
                }
    
                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 = 0;
                for (int i = 0; i < s.Length; i++)
                {
                    var c = s[i];
                    var num = ChangeToInt(c);
                    if (lastnum == 0)//存储第一个值
                    {
                        lastnum = num;
                        list.Add(num);
                    }
                    else//第一个值之后的值
                    {
                        if (num <= lastnum)//当前的值,比之前的值小,可以放在右边
                        {
                            //list中的值可以放入list2
                            lastnum = num;
                            var partsum = 0;
                            for (int j = 0; j < list.Count; j++)
                            {
                                partsum += list[j];
                            }
                            list2.Add(partsum);
    
                            list.Clear();
                            list.Add(num);
    
                        }
                        else
                        {
                            //出现了左小,进行减法
                            var partsum = 0;
                            for (int j = 0; j < list.Count; j++)
                            {
                                partsum += list[j];
                            }
                            partsum = num - partsum;
                            list.Clear();
                            list.Add(partsum);
                            lastnum = partsum;
                        }
                    }
                }
    
                if (list.Any())//处理最后一部分的值
                {
                    var partsum = 0;
                    for (int j = 0; j < list.Count; j++)
                    {
                        partsum += list[j];
                    }
                    list2.Add(partsum);
                    list.Clear();
                }
    
                var result = 0;
                foreach (var d in list2)
                {
                    result += d;
                }
                Console.WriteLine(result);
                return result;
            }
        }

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

  • 相关阅读:
    selenium 清空文本几种方法
    python之Chrome 启动参数
    python, selenium 之屏蔽提示框
    myeclipse 安装flex插件后变为中文 修改配置文件切换到英文界面
    用ant编译打包时 警告:编码 GBK 的不可映射字符
    redhat5.1上安装oracle 10.2g客户端及配置使用
    tomcat 1)启动时不识别执行启动命令 2)启动报错 3)关闭不了,用myEclipse启动时显示jvm_bind,端口占用
    virtualBox redhat 共享文件夹 安装增强功能
    ant 内存空间不足
    Linux (ubuntu和redhat) 常用命令及细节
  • 原文地址:https://www.cnblogs.com/asenyang/p/6732477.html
Copyright © 2011-2022 走看看