当前位置:网站首页>Roman numeral to integer

Roman numeral to integer

2022-07-05 22:43:00 dying_ star

 

Roman numerals contain the following seven characters : I, V, X, L,C,D  and  M.

character           The number
I             1
V             5
X             10
L             50
C             100
D             500
M             1000
for example , Rome digital 2 Write to do  II , Two parallel 1 .12 Write to do  XII , That is to say  X + II . 27 Write to do   XXVII, That is to say  XX + V + II .

Usually , The small numbers in roman numbers are to the right of the big ones . But there are special cases , for example 4 Do not write  IIII, It is  IV. Numbers 1 In number 5 Left side , The number represented is equal to the large number 5 Decimal reduction 1 Value obtained 4 . similarly , Numbers 9 Expressed as  IX. This special rule only applies to the following six cases :

I  Can be placed in  V (5) and  X (10) Left side , To express 4 and 9.
X  Can be placed in  L (50) and  C (100) Left side , To express 40 and  90. 
C  Can be placed in  D (500) and  M (1000) Left side , To express  400 and  900.
Given a Roman number , Convert it to an integer .

source : Power button (LeetCode)
link :https://leetcode-cn.com/problems/roman-to-integer
Copyright belongs to the network . For commercial reprint, please contact the official authority , Non-commercial reprint please indicate the source .

  From selected reviews

The problem is very simple when you understand it . So let's set up a HashMap To map symbols and values , Then the string from left to right , If the value represented by the current character is not less than its right , Add this value ; Otherwise, subtract the value . And so on to the leftmost number , The final result is the answer


class Solution {
    public int romanToInt(String s) {
        HashMap<Character,Integer> hm=new HashMap<>();
        int[] v={1,5,10,50,100,500,1000};
        char[] k={'I','V','X','L','C','D','M'};
        for(int j=0;j<7;j++){
            hm.put(k[j],v[j]);
        }
// Create a hashmap Realize the mapping between Roman numerals and integers 
        int flag=hm.get(s.charAt(0));//flag Point to the current number 
        int sum=0;// Define an accumulator 
        for(int i=1;i<s.length();i++){
            char key=s.charAt(i);// Traverse the Roman string 
           int flagnext= hm.get(key);//flagnext Point to flag The next number , Through cyclic update 
           if(flag<flagnext){
               sum-=flag;
           }
           else{
           sum+=flag;}
           flag=flagnext;// to update flag
        }
        sum+=flag;//flag At this point, it points to the last number , Not accumulated in the loop , Add here 
        return sum;
    }
}

原网站

版权声明
本文为[dying_ star]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140406278584.html