当前位置:网站首页>Leetcode13. Roman numeral to integer (three solutions)
Leetcode13. Roman numeral to integer (three solutions)
2022-07-03 17:06:00 【Aricl.】
Title Description
Roman numerals contain the following seven characters :
I,V,X,L,C,DandM.character The number
I 1
V 5
X 10
L 50
C 100
D 500
M 1000for 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 .Example 1:
Input : s = "III" Output : 3Example 2:
Input : s = "MCMXCIV" Output : 1994 explain : M = 1000, CM = 900, XC = 90, IV = 4source : Power button (LeetCode)
link :https://leetcode.cn/problems/roman-to-integer
Method 1: Enumeration , Also called if else brute-force attack
class Solution {
public:
int romanToInt(string s) {
int n=s.size();
int sum=0;
for(int i=0;i<n;i++){
if(i+1<n&&s[i]=='I'&&s[i+1]=='V'){
sum+=4;
i++;// Characters in the current position and the next position constitute characters in special cases , Then directly cross the character , Move variable plus 1
}else if(i+1<n&&s[i]=='I'&&s[i+1]=='X'){
sum+=9;
i++;
}else if(i+1<n&&s[i]=='X'&&s[i+1]=='L'){
sum+=40;
i++;
}else if(i+1<n&&s[i]=='X'&&s[i+1]=='C'){
sum+=90;
i++;
}else if(i+1<n&&s[i]=='C'&&s[i+1]=='D'){
sum+=400;
i++;
}else if(i+1<n&&s[i]=='C'&&s[i+1]=='M'){
sum+=900;
i++;
}
else{
if(s[i] == 'I') sum+=1;
else if(s[i] == 'V') sum += 5;
else if(s[i] == 'X') sum += 10;
else if(s[i] == 'L') sum += 50;
else if(s[i] == 'C') sum += 100;
else if(s[i] == 'D') sum += 500;
else if(s[i] == 'M') sum += 1000;
}
}
return sum;
}
};Method 2: Ingenious solution : Consider the relationship between the value corresponding to each character and the value corresponding to the next character , If less than, the value corresponding to this character becomes negative , Otherwise, it is still positive , Finally, cycle and accumulate
class Solution{
public:
// Create a key value table
int getValue(char a){
switch(a){
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;
}
}
int romanToInt(string s){
int n=s.size();
int sum=0,i=0;
for(i=0;i<n;i++){
/* Use the monocular judgment operator , Compare the current value with the next value , If the current value is greater than the latter value, the current value
Being positive , Otherwise, it is the special situation described in the title , The current value becomes negative , Cycle and accumulate the corresponding values of each character */
sum+=getValue(s[i+1])>getValue(s[i])? -getValue(s[i]):getValue(s[i]);
}
return sum;
}
}; Method 3: Converse thinking , Traverse from right to left , Record the current maximum , If you encounter larger ones, add them , Meet smaller ones and subtract ( This idea is really simple and easy to understand , A netizen commented on the area code )
class solution{
public:
// Create a key value table
int getValue(char a){
switch(a){
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;
}
}
// Method 3 : Converse thinking , Traverse from right to left , Record the current maximum , If you encounter larger ones, add them , Meet smaller ones and subtract
int function3(string s){
int n=s.size();
int max=1,sum=0,level=0;//level Record the current value
for(int i=n-1;i>=0;i--){
level=getValue(s[i]);
if(level>=max){
sum+=level;
max=level;// Update Max
}else{
sum-=level;
}
}
return sum;
}
}; Start with simple questions , Brush at least one question every day , Continue to share the experience and process of topic brushing !
Pay attention to , Enjoy the fun of writing questions together !
边栏推荐
- CC2530 common registers for port initialization
- What material is 12cr1movr? Chemical property analysis of pressure vessel steel plate 12cr1movr
- [JDBC] API parsing
- C language string inversion
- C language modifies files by line
- 手把手带你入门 API 开发
- 新库上线 | CnOpenData中国保险机构网点全集数据
- 美团一面:为什么线程崩溃崩溃不会导致 JVM 崩溃
- Rsync远程同步
- One brush 148 force deduction hot question-5 longest palindrome substring (m)
猜你喜欢
The way of wisdom (unity of knowledge and action)

CC2530 common registers for port interrupts

静态程序分析(一)—— 大纲思维导图与内容介绍

New features of C 10

How do large consumer enterprises make digital transformation?

Pools de Threads: les composants les plus courants et les plus sujets aux erreurs du Code d'affaires

What is the material of 13mnnimor? 13mnnimor steel plate for medium and low temperature pressure vessels

Why is WPA3 security of enterprise business so important?

What material is sa537cl2 equivalent to in China? Sa537cl2 corresponding material

人生还在迷茫?也许这些订阅号里有你需要的答案!
随机推荐
Difference between JSON and bson
Necessary ability of data analysis
C language string inversion
设计电商秒杀
【Try to Hack】主动侦查隐藏技术
Meituan side: why does thread crash not cause JVM crash
Squid 服务启动脚本
[combinatorics] recursive equation (definition of general solution | structure theorem of general solution of recursive equation without multiple roots)
Interpretation of several important concepts of satellite antenna
[combinatorial mathematics] counting model, common combinatorial numbers and combinatorial identities**
新库上线 | CnOpenData中国观鸟记录数据
IL Runtime
Redis:关于列表List类型数据的操作命令
mysql用户管理
LeetCode 1658. Minimum operand to reduce x to 0
LeetCode 1657. Determine whether the two strings are close
function overloading
[combinatorics] recursive equation (constant coefficient linear homogeneous recursive equation | constant coefficient, linear, homogeneous concept description | constant coefficient linear homogeneous
Recommendation of good books on learning QT programming
Pools de Threads: les composants les plus courants et les plus sujets aux erreurs du Code d'affaires