題目的給出了幾種轉換策略,以及在個位是4,6的時候有一些變換。首先乙個整數num的範圍是1~3999,數字的位數情況是:千位,百位,十位,個位。每一位的數字其實就有四種情況,以百位為例:
[100,300] 是一類;400是一類;[500,800]是一類;900是一類
整個演算法上沒什麼特別困難的比較好理解,有個地方:
res += roman[i] + roman[i-1];
懷疑是運算子過載的時候,字串的"+="後面不能跟兩個字元。
具體: 演算法步驟
class solution ;
vectornum_vec;
for(int i =0;i<7;i+=2)
else if(x == 9)
//res += roman[i] + roman[i-2]; //特別處理:cm = 900
res = res + roman[i] + roman[i-2];
num %= num_vec[i];
}return res;
}};
簡單的遍歷整個字串,一開始想的很複雜,想把六種特殊情況也弄成到雜湊表裡面,然後又判斷i+1位和i位大小從而來辨別是否是特殊情況。。。(蠢得不行),然後借鑑別人思路,題目的關鍵就在於:了解羅馬數的構成。
特殊情況下,比如4,iv,如果我們遍歷字串先訪問s[i] = i,表示1,而s[i+1]=v,表示5。s[i+1]是比s[i]大,所以是特殊情況。此時可以靈活的由「5-1」變成"-1+5",也就是減去當前位置的值。需要注意的就是訪問越界,所以當最後一位的時候就不用進行判斷「和下一位比較」。
具體:演算法步驟
class solution ,,,,,,};
for(int i = 0;i < s.size();i++)
return res;
}};
13 羅馬數轉整數
從左到右逐個字元遍歷字串,找出字元對應的整數,累加起來,在找字元的過程中,需要判斷該字元對應整數與後面乙個字元對應的整數的大小關係。如果前面大於後面字元對應的整數,則將前面字元對應的整數加進去,否則將後面字元對應的整數減去前面字元對應的整數得到的值加進去,此時這次遍歷要跳躍兩個字元來進行下一次遍歷。...
leetcode 13 羅馬數轉整數
羅馬數字包含以下七種字元 i,v,x,l,c,d 和 m。字元 數值 i 1 v 5 x 10 l 50 c 100 d 500 m 1000 例如,羅馬數字 2 寫做 ii 即為兩個並列的 1。12 寫做 xii 即為 x ii 27 寫做 xxvii,即為 xx v ii 通常情況下,羅馬數字中...
leetcode 整數轉羅馬數
羅馬數字包含以下七種字元 i,v,x,l,c,d 和 m。字元 數值 i 1v 5 x 10 l 50 c 100 d 500 m 1000 例如,羅馬數字 2 寫做 ii 即為兩個並列的 1。12 寫做 xii 即為 x ii 27 寫做 xxvii,即為 xx v ii 通常情況下,羅馬數字中小...