当前位置:网站首页>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 !
边栏推荐
- 跨境电商:外贸企业做海外社媒营销的优势
- [2. Basics of Delphi grammar] 2 Object Pascal data type
- 線程池:業務代碼最常用也最容易犯錯的組件
- C language string practice
- One brush 148 force deduction hot question-5 longest palindrome substring (m)
- 新库上线 | CnOpenData中国观鸟记录数据
- Assembly instance analysis -- screen display in real mode
- Great changes! National housing prices fell below the 10000 yuan mark
- visual studio “通常每个套接字地址(协议/网络地址/端口)只允许使用一次“
- Depth first search of graph
猜你喜欢
![[JDBC] API parsing](/img/75/0f69a4e246a571688355bb13e2cd73.jpg)
[JDBC] API parsing

Web crawler knowledge day03

How do large consumer enterprises make digital transformation?

What material is sa537cl2? Analysis of mechanical properties of American standard container plate

【Try to Hack】主动侦查隐藏技术

What is your income level in the country?

Leetcode: lucky number in matrix

建立自己的网站(23)

CC2530 common registers for port initialization

線程池:業務代碼最常用也最容易犯錯的組件
随机推荐
大变局!全国房价,跌破万元大关
RedHat 6.2 配置 Zabbix
新库上线 | CnOpenData中国保险机构网点全集数据
匯編實例解析--實模式下屏幕顯示
New features of C 10
Redis: operation commands for list type data
Prepare for the golden three silver four, 100+ software test interview questions (function / interface / Automation) interview questions. win victory the moment one raises one 's standard
線程池:業務代碼最常用也最容易犯錯的組件
NLP four paradigms: paradigm 1: fully supervised learning in the era of non neural networks (Feature Engineering); Paradigm 2: fully supervised learning based on neural network (Architecture Engineeri
utfwry. Dat PHP, about ThinkPHP's method of IP location using utfwry address Library
Visual studio "usually, each socket address (Protocol / network address / port) can only be used once“
Static program analysis (I) -- Outline mind map and content introduction
数据分析必备的能力
How SVN views modified file records
Overview of satellite navigation system
人生还在迷茫?也许这些订阅号里有你需要的答案!
网络硬盘NFS的安装与配置
Hands on in-depth learning notes (XIV) 3.7 Simple implementation of softmax regression
How to delete a specific line from a text file using the SED command?
Squid service startup script