码迷,mamicode.com
首页 > 其他好文 > 详细

13.Roman to Integer

时间:2019-07-08 13:16:14      阅读:51      评论:0      收藏:0      [点我收藏+]

标签:大神   想法   cas   default   string   str   制作   判断   解法   

技术图片
本人想法比较简单

class Solution {
 
    public int romanToInt(String s) {
        char arr[] = new char[s.length() + 1];//定义一个一维数组存放数据
        for (int i = 0; i < s.length(); i++) {//将输入的字符串遍历一遍
            arr[i] = s.charAt(i);
        }
        
        int sum = 0;
        for (int i = 0; i < s.length(); i++) {//判断一个或者两个罗马数字的所对应的值 并加上去
            if (arr[i] == 'M') {
                sum = sum+1000;
            } else if (arr[i] == 'C') {
                if (arr[i + 1] == 'M') {
                    sum = sum+900;
                    i++;
                } else if (arr[i + 1] == 'D') {
                    sum = sum+400;
                    i++;
                } else {
                    sum = sum+100;
                }
            } else if (arr[i] == 'D') {
                sum = sum+500;
            } else if (arr[i] == 'X') {
                if (arr[i + 1] == 'C') {
                    sum = sum+90;
                    i++;
                } else if (arr[i + 1] == 'L') {
                    sum = sum+40;
                    i++;
                } else {
                    sum = sum+10;
                }
            } else if (arr[i] == 'L') {
                sum = sum+50;
            } else if (arr[i] == 'I') {
                if (arr[i + 1] == 'X') {
                    sum = sum+9;
                    i++;
                } else if (arr[i + 1] == 'V') {
                    sum = sum+4;
                    i++;
                } else {
                    sum = sum+1;
                }
            } else if (arr[i] == 'V') {
                sum =sum +5;
            }
        }
        return sum;
    }
    
}

其他大神的解法 我一步一步分析
case语句解法

public int romanToInt(String s) {
        int n = s.length();
        int roman_int = 0;
        for(int i=0;i<n;i++)
        {
            switch(s.charAt(i)) //定义一个case 语句块
            {
            case 'I' : roman_int = roman_int + 1;break;
            case 'V' : roman_int = roman_int + 5;break;
            case 'X' : roman_int = roman_int + 10;break;
            case 'L' : roman_int = roman_int + 50;break;
            case 'C' : roman_int = roman_int + 100;break;
            case 'D' : roman_int = roman_int + 500;break;
            case 'M' : roman_int = roman_int + 1000;break;
            default: System.out.println("default");break;
            }
 
            if(i!=0)
            {
                if(((s.charAt(i)=='V')||(s.charAt(i)=='X'))&&(s.charAt(i-1)=='I')) 
                    roman_int = roman_int-1*2;
                if(((s.charAt(i)=='L')||(s.charAt(i)=='C'))&&(s.charAt(i-1)=='X'))
                    roman_int = roman_int-10*2;
                if(((s.charAt(i)=='D')||(s.charAt(i)=='M'))&&(s.charAt(i-1)=='C'))
                    roman_int = roman_int-100*2;
            }
        }
        return roman_int;
    }

hash码

class Solution 
{
    public int romanToInt(String s)
    {//制作一个hash表
        HashMap<Character, Integer> map = new HashMap<Character, Integer>()
        {{
            put('I', 1);
            put('V', 5);
            put('X', 10);
            put('L', 50);
            put('C', 100);
            put('D', 500);
            put('M', 1000);
        }};
        
        int sum = map.get(s.charAt(s.length() - 1));
        
        for(int i = s.length() - 2; i >= 0; i--)
        {
            if(map.get(s.charAt(i)) < map.get(s.charAt(i + 1)))
            {
                sum -= map.get(s.charAt(i));
            }
            else
            {
                sum += map.get(s.charAt(i));
            }
        }
        return sum;
    }
}

13.Roman to Integer

标签:大神   想法   cas   default   string   str   制作   判断   解法   

原文地址:https://www.cnblogs.com/cznczai/p/11150532.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!