zoukankan      html  css  js  c++  java
  • Roman to Integer

    package cn.edu.xidian.sselab.string;

    import java.util.HashMap;
    import java.util.Map;

    /**
     *
     * @author zhiyong wang
     * title: Roman to Integer
     * content:
     *
     *Given a roman numeral, convert it to an integer.
     *
     *Input is guaranteed to be within the range from 1 to 3999.
     */
    public class RomantoInteger {

        //这个题只要明白好了规则就可以,遍历的时候注意:IV表示4,IX表示9,XL表示40,XC表示90,CD表示400,CM表示900就可以了
        public int romanToInteger(String s){
            char[] standard = {'I','V','X','L','C','D','M'};
            int[] standardNum = {1,5,10,50,100,500,1000};
            char[] arr = s.toCharArray();
            int len = arr.length;
            int result =  0;
            for(int i=0;i<len;i++){
                switch(arr[i]){
                case 'M': result += 1000;break;
                case 'D': result += 500;break;
                case 'C':
                    if(i < len-1 && arr[i+1] == 'D'){
                        result += 400;
                        i++;
                        break;
                    }
                    if(i < len-1 && arr[i+1] == 'M'){
                        result += 900;
                        i++;
                        break;
                    }
                    result += 100;
                    break;
                case 'L': result += 50;break;
                case 'X':
                    if(i < len-1 && arr[i+1] == 'L'){
                        result += 40;
                        i++;
                        break;
                    }
                    if(i < len-1 && arr[i+1] == 'C'){
                        result += 90;
                        i++;
                        break;
                    }
                    result += 10;
                    break;
                case 'V': result += 5;break;
                case 'I':
                    if(i < len-1 && arr[i+1] == 'X'){
                        result += 9;
                        i++;
                        break;
                    }
                    if(i < len-1 && arr[i+1] == 'V'){
                        result += 4;
                        i++;
                        break;
                    }
                    result += 1;
                    break;            
                }
            }
            return result;    
        }
        
        //参考的另外一种思路,即从右往左来进行遍历,计算结果,如果右边的数值大于左边的,就将其减去,如果小于,就加上作为最后结果
        public int romanToIntegers(String s){
            Map map = new HashMap();
            map.put('I',1);
            map.put('V', 5);
            map.put('X', 10);
            map.put('L', 50);
            map.put('C', 100);
            map.put('D', 500);
            map.put('M', 1000);
            int len = s.length();
            int result = (int) map.get(s.charAt(len-1));
            int pivot = result;
            for(int i=len-2;i>=0;i--){
                int cur = (int) map.get(s.charAt(i));
                if(cur >= pivot){
                    result += cur;
                }else{
                    result -= cur;
                }
                pivot = cur;
            }
            return result;
        }
    }

  • 相关阅读:
    找最后的字符
    统计指定数字和
    班级排队
    python编程题
    python函数题
    2019.6.24-2019.6.28(实训数据结构)3.数组编码求解问题
    2019.6.24-2019.6.28(实训数据结构)1.商品管理系统实训c++(实现的基本功能:初始化,创建表,插入,删除,更新,查询,链表数据与文件之间的转换)
    2019.6.24-2019.6.28(实训数据结构) 2.背包问题
    2019.6.24-2019.6.28(实训数据结构)4.树和二叉树应用项目
    2019.6.24-2019.6.28(实训数据结构)5.图的邻接矩阵表示
  • 原文地址:https://www.cnblogs.com/wzyxidian/p/5217903.html
Copyright © 2011-2022 走看看