首页 > 其他分享 >罗马数字转整数

罗马数字转整数

时间:2023-09-25 15:25:36浏览次数:39  
标签:case return int sum 整数 罗马数字 prePriority

罗马数字转整数

题目

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。

题解

  • 也可以用map存储对应关系
  • 可以通过replace()函数将特殊情况下的字符串中的字符,直接替换掉
  • 一开始错误原因是每个字符直接判断是否要加入sum,实际上要和下一个字符比较之后才能得出,如果后一个字符优先级更高则要扣除
class Solution {
    public int romanToInt(String s) {
        if(s.length()==0){
         return 0;
        }
        if(s.length()==1){
            return returnPriority(s.charAt(0));
        }
        int sum=0;
        int prePriority=returnPriority(s.charAt(0));
        for(int i=1;i<s.length();i++){
            if(returnPriority(s.charAt(i))>prePriority){
                sum-=prePriority;
            }else{
                sum+=prePriority;
            }
            prePriority=returnPriority(s.charAt(i));
        }
        sum+=prePriority;
        return sum;
    }
   public int returnPriority(char x){
        switch(x){
            case 'I':
                return 1;
            case 'V':
                return 5;
            case 'X':
                return 10;
            case 'L':
                return 50;
            case 'C':
                return 100;
            case 'D':
                return 500;
            case 'M':
                return 1000;
            default:
                return 0;
        }
    }
}

标签:case,return,int,sum,整数,罗马数字,prePriority
From: https://www.cnblogs.com/hithin/p/17727980.html

相关文章

  • QOJ 5019 整数
    QOJ传送门考虑从低位向高位dp,设\(f_{i,S}\)为考虑到从低到高第\(i\)位,当前每个数超出上界的情况为\(S\)。转移可以枚举这一位填的数:若\(a_j=0,r_j=1\),那么这一位一定不会超出上界;若\(a_j=1,r_j=0\),那么这一位一定会超出上界。否则情况和之前相同。容......
  • 算法题——定义一个方法自己实现 toBinaryString 方法的效果,将一个十进制整数转成字符
    用除基取余法,不断地除以基数(几进制,基数就是几)得到余数,直到商为0,再将余数倒着拼起来即可。privatestaticStringtoBinaryString(intnumber){StringBuildersb=newStringBuilder();while(true){if(number==0)break;intyushu=num......
  • shell整数计算器
    #!/bin/bashcheckInt(){arr=$1foriin"${arr[@]}";dotemp=`echo$i|sed's/[0-9]//g'|sed's/[]*//g'`if[-n"$temp"];thenecho"$imustbeinteger"return1fid......
  • 字符'1'和整数1的区别
    字符'1'和整数1的区别━━━━━━━━━━━━━━━━━━━━━━字符'1'是一个符号,在内存中以ASCII码对应的二进制00110001存放;整数1是一个数字,在内存中以数字1的二进制的补码00000001存放。......
  • 不使用第三个变量交换两个整数a,b的值
    //题目:不使用第三个变量交换两个整数a,b的值inta=2;intb=5;//第一种方式//a=a+b;//b=a-b;//a=a-b;//txta.Text=a.ToString();//txtb.Text=b.ToString(......
  • 《剑指Offer》-21-调整数组顺序使奇数位于偶数前面
    第一想法是双指针,一个指针用于遍历,一个指针用于标记奇数和偶数的分界,而调整位置则通过交换来实现思路来自于快排代码,分隔指针+交换,也算是双指针? vector<int>exchange(vector<int>&nums){ //一个遍历指针,一个分隔指针,odd指向第一个偶数 intodd=0; for(inti=0;i......
  • 自动检测MultiIndex的维数并全部转化为整数
    将pd.MultiIndex.from_tuples(  [(int(a),int(b))fora,binmy_df.index],  names=my_df.index.names)改写为自动检测MultiIndex的维数并全部转化为整数的函数importpandasaspdimportnumpyasnp#YouroriginalDataFramemy_df=pd.DataFrame(np.add......
  • python 如何将不完全连续的整数序列按[1-5,6,8-10]的格式输出,给出函数代码
    python如何将不完全连续的整数序列按[1-5,6,8-10]的格式输出,给出函数代码defformat_integer_sequence(seq):formatted_seq=[]start=Noneend=Nonefornuminsorted(seq):ifstartisNone:start=numend=num......
  • 2023-09-16:用go语言,给你一个整数 n 和一个在范围 [0, n - 1] 以内的整数 p , 它们表示
    2023-09-16:用go语言,给你一个整数n和一个在范围[0,n-1]以内的整数p,它们表示一个长度为n且下标从0开始的数组arr,数组中除了下标为p处是1以外,其他所有数都是0。同时给你一个整数数组banned,它包含数组中的一些位置。banned中第i个位置表示arr[banned[i......
  • 基础二分算法:整数二分、浮点二分
    1、整数二分以acwing789为例,题目要求如下:第一行输入整数n和q,表示数组长度和询问个数。第二行输入数组,包含n个整数。接下来q行,每一行一个整数k,表示一个问询元素。要求输出q行,每行包含两个整数,表示所求元素的起始位置和终止位置。如果数组中不存在该元素,则返回-1-1。#inc......