LeetCode 第十三道题 Roman to Integer

本文详细介绍了如何将罗马数字转换为整数的方法,并提供了一段使用Java编写的示例代码。文中阐述了罗马数字的基本构成及转换规则,通过实例演示了算法的具体实现过程。

一 , Roman to Integer(罗马数字转换成整数)
1,问题描述:
给定一个罗马数字,要求转成成整数(该整数的范围为[1~3999]

2, 罗马数字的描述:
第一,罗马数字最基本的有五个: I, II , III, IV , V分别代表数字1,2,3,4,5
第二,还有七个基本罗马字符:
I: 1
V: 5
X: 10
L: 50
C: 100
D: 500
M: 1000

3,有一些罗马规则如下:
第一,相同的数字连写时,所表示的数=这些数字相加得到的数, 如: III=3;
第二,小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如: VIII=8;
第三, 小的数字,(只限于I, X和C这三个)在大的数字的左边,所表示的数=大数减去小数得到的数, 如: IV=4; IX=9;
第四, 正常使用时,连写的数字重复不得超过三次。
例如: CXXIII=100+10+10+1+1+1=123。

4, 例如 XLVII=47, III=3
MMMCCLXXIV=3274

二,AC了的程序, 用Java写成的。

import java.util.*;
public class Test2 {      //leetcode 13

    public static int romanToInt(String s) {
        int result=0;
        int i=0;
        boolean flag;
        String str1="";
        int []data={1,4,5,9,10,40,50,90,100,400,500,900,1000};//什么是这些数,因为每个字符不能超过三个,因此,当数字为4是,则需要用5减去1,不能用4个1表示
        String []str={"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"};//一共有十三个数,其余数字可以用这十三个数组成
        while(i<s.length())
        {
            if(i+1<s.length())  
            {
                str1 = s.substring(i, i + 2);  //由于罗马数字要么两个字符代表一个整数,要么一个字符代表一个整数,因此要考虑这两种情况
            }
            else
            {
                str1="";
            }
            String str2=String.valueOf(s.charAt(i));//这个考虑一个字符代表一个整数
            flag=true;
            for(int j=0;j<str.length;j++) {
                if (str1.equals(str[j])) {     //当两个字符代表的一个整数和给定的字符数组里的元素相匹配时,则把对应位置i的整数数组元素data[i]加上
                    result = result + data[j]; 
                    i = i + 2;  //加上后,则下标移动两位
                    flag = false;
                    break;
                }
            }
            if(flag==true) {//当一个字符代表的一个整数和给定的字符数组里的元素相匹配时,则把对应下标的i整数数组元素data[i]加上
                for (int j = 0; j < str.length; j++) {
                    if (str2.equals(str[j])) {
                        result = result + data[j];
                        i++;  //加上后,则下标移动一位
                        break;
                    }
                }
            }
        }
        return  result;   //把最终的结果返回。
    }

    public static void main(String []args)
    {
        Scanner scan=new Scanner(System.in);
        String str;
        int data;
        str=scan.nextLine();
        data=romanToInt(str);
        System.out.println("罗马数字转化为整数: "+data);
    }


}

运行结果图:

这里写图片描述

三,总结
这题,主要从两个字符代表一个整数,或者一个字符代表一个整数,从字符串左遍历到右边。就可以得到最终的整数。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值