当前位置:网站首页>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 !
边栏推荐
- 建立自己的网站(23)
- SSH连接远程主机等待时间过长的解决方法
- Open vsftpd port under iptables firewall
- RedHat 6.2 配置 Zabbix
- Leetcode: lucky number in matrix
- Free data | new library online | cnopendata complete data of China's insurance intermediary outlets
- Execute script unrecognized \r
- An example of HP array card troubleshooting
- [combinatorics] polynomial theorem (polynomial coefficients | full arrangement of multiple sets | number of schemes corresponding to the ball sub model | polynomial coefficient correlation identity)
- Life is still confused? Maybe these subscription numbers have the answers you need!
猜你喜欢

Leetcode: lucky number in matrix

29:第三章:开发通行证服务:12:开发【获得用户账户信息,接口】;(使用VO类包装查到的数据,以符合接口对返回数据的要求)(在多处都会用到的逻辑,在Controller中可以把其抽成一个共用方法)

CC2530 common registers for crystal oscillator settings

New features of C 10

Web crawler knowledge day03

Free data | new library online | cnopendata complete data of China's insurance intermediary outlets

Static program analysis (I) -- Outline mind map and content introduction

13mnnimo5-4 German standard steel plate 13MnNiMo54 boiler steel 13MnNiMo54 chemical properties

建立自己的网站(23)

手把手带你入门 API 开发
随机推荐
图之深度优先搜索
Assembly instance analysis -- screen display in real mode
Difference between JSON and bson
C language modifies files by line
C language string inversion
线程池:业务代码最常用也最容易犯错的组件
Recommendation of good books on learning QT programming
网络安全web渗透技术
LeetCode 1657. Determine whether the two strings are close
C语言字符串反转
29:第三章:开发通行证服务:12:开发【获得用户账户信息,接口】;(使用VO类包装查到的数据,以符合接口对返回数据的要求)(在多处都会用到的逻辑,在Controller中可以把其抽成一个共用方法)
C语言按行修改文件
[combinatorics] recursive equation (characteristic equation and characteristic root | example of characteristic equation | root formula of monadic quadratic equation)
远程办公之如何推进跨部门项目协作 | 社区征文
What material is sa537cl2? Analysis of mechanical properties of American standard container plate
Open vsftpd port under iptables firewall
手把手带你入门 API 开发
[combinatorics] polynomial theorem (polynomial theorem | polynomial theorem proof | polynomial theorem inference 1 item number is the number of non negative integer solutions | polynomial theorem infe
One brush 145 force deduction hot question-2 sum of two numbers (m)
RedHat 6.2 配置 Zabbix