2

分享

13. Roman to Integer (C++)

13.Roman to Integer羅馬數字轉int、Leetcode
【筆記1】:

String(字串)

  

#include <string>

std::string 變數 = "abc"

像陣列一樣使用
  

std::string s = "abc"

s[0];  //'a'

s[1];  //'b'

s[2];  //'c'

s.find("字串")
  • 成功:回傳查詢第一次出現"字串"的位置
  • 失敗:If no elements match, the function returns last.
s.replace(位置,字元數,"字串")
  • 指定位置開始的x個字元數,取代成"字串"
【筆記2】:

Char(字元)

  • char s = 'V';(正確)、char s = "V";(錯誤)
  

'a','b','c'

std::map複習:std::map (C++) @匿名李 - 探路客 部落格 (timelog.to)

13. Roman to Integer

題目:給定一個羅馬數字字串(string),回傳代表的數字是多少。
背景知識
  

I = 1

V=5 

X=10 

L =50 

C=100

D=500 

M =1000

I 前面可以加 V or X 代表 4 or 9

X前面可以加 L or C 代表 40 or 90

C前面可以加 D or M 代表 400 or 900

例如:
  • III = I(1)+I(1)+I(1) = 3
  • MCMXCIV = M(1000) + CM(900) + XC(90) + IV(4) = 1994

Code(if-else)

  

#include <iostream>

#include <string>

int main () {

int x = 0;

std::string s = "III";

// std::string s = "MCMXCIV";


while(s != ""){

        if(s.find("IV")!=-1){s.replace(s.find("IV"),2,"");x+=4;}

        if(s.find("IX")!=-1){s.replace(s.find("IX"),2,"");x+=9;}

        if(s.find("XL")!=-1){s.replace(s.find("XL"),2,"");x+=40;}

        if(s.find("XC")!=-1){s.replace(s.find("XC"),2,"");x+=90;}

        if(s.find("CD")!=-1){s.replace(s.find("CD"),2,"");x+=400;}

        if(s.find("CM")!=-1){s.replace(s.find("CM"),2,"");x+=900;}

        if(s.find("I")!=-1){s.replace(s.find("I"),1,"");x+=1;}

        if(s.find("V")!=-1){s.replace(s.find("V"),1,"");x+=5;}

        if(s.find("X")!=-1){s.replace(s.find("X"),1,"");x+=10;}

        if(s.find("L")!=-1){s.replace(s.find("L"),1,"");x+=50;}

        if(s.find("C")!=-1){s.replace(s.find("C"),1,"");x+=100;}

        if(s.find("D")!=-1){s.replace(s.find("D"),1,"");x+=500;}

        if(s.find("M")!=-1){s.replace(s.find("M"),1,"");x+=1000;}

        }

std::cout<<x<<std::endl;

}

leetcode 筆記 c語言

if-else

Output

  

1994

Code(std::map)

  

#include <iostream>

#include <string>

#include <map>

using namespace std;

int main () {

        int x = 0;  

        string s = "MCMXCIV";  // string s = "III";

        map<char, int> record;

        record.insert(map<char, int>::value_type('I', 1));

        record.insert(map<char, int>::value_type('V', 5));

        record.insert(map<char, int>::value_type('X', 10));

        record.insert(map<char, int>::value_type('L', 50));

        record.insert(map<char, int>::value_type('C', 100));

        record.insert(map<char, int>::value_type('D', 500));

        record.insert(map<char, int>::value_type('M', 1000));

        int y1 = 0;

        int y2 = 0;

        for(int i=0; i<s.length(); i++){

                y1 = record.find(s[i]) -> second;

                y2 = record.find(s[i+1]) -> second;

                if(i == s.length()-1){

                        y2=0;

                }

                if(y2>y1){

                        x+=y2-y1;

                        i++;

                }

                else{

                        x+=y1;

                }

        }

        cout<<x<<endl;

}

leetcode 筆記 c語言

std::map

Output

  

1994

參考資料

[1]. Roman to Integer - LeetCode
[2]. C++ 中字符串查找、字符串截取、字符串替换 - 小明他很忙 - 博客园 (cnblogs.com)
[3]. find - C++ Reference (cplusplus.com)
[4]. 字元(char) | C++與演算法 (ntu.edu.tw)
[5]. LeetCode 13. Roman to Integer · 初學者練習 - LeetCode with Javascript (gitbooks.io)
#leetcode  #筆記  #c語言 
分類:學習

【關鍵字】:新手教學、Leetcode ; 【分類】:學習、理財。(目前C++新手教學第二章內容已完結)。建議或意見可私訊:https://reurl.cc/ze7L9k。文章有錯誤的地方還請留言指正,謝謝各位

評論
上一篇
  • C++ 新手教學8
  • 下一篇
  • 14. Longest Common Prefix (C++)
  • 更多文章
    載入中... 沒有更多了