13. 羅馬數(shù)字轉(zhuǎn)整數(shù)
羅馬數(shù)字包含以下七種字符:I桃移,V仔雷,X蹂析,L舔示,C,D和M电抚。
字符數(shù)值? ? ? ? ? ? ? 數(shù)值
I? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1
V? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5
X? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 10
L? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 50
C? ? ? ? ? ? ? ? ? ? ? ? ? ? 100
D? ? ? ? ? ? ? ? ? ? ? ? ? ? 500
M? ? ? ? ? ? ? ? ? ? ? ? ? ? 1000
例如惕稻, 羅馬數(shù)字 2 寫做II,即為兩個并列的 1蝙叛。12 寫做XII俺祠,即為X+II。 27 寫做XXVII, 即為XX+V+II借帘。
通常情況下蜘渣,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊。但也存在特例肺然,例如 4 不寫做IIII蔫缸,而是IV。數(shù)字 1 在數(shù)字 5 的左邊际起,所表示的數(shù)等于大數(shù) 5 減小數(shù) 1 得到的數(shù)值 4 拾碌。同樣地,數(shù)字 9 表示為IX街望。這個特殊的規(guī)則只適用于以下六種情況:
I可以放在V(5) 和X(10) 的左邊校翔,來表示 4 和 9。
X可以放在L(50) 和C(100) 的左邊它匕,來表示 40 和 90展融。
C可以放在D(500) 和M(1000) 的左邊窖认,來表示 400 和 900豫柬。
給定一個羅馬數(shù)字,將其轉(zhuǎn)換成整數(shù)扑浸。輸入確保在 1 到 3999 的范圍內(nèi)烧给。
示例 1:
輸入:"III"輸出:3
示例 2:
輸入:"IV"輸出:4
示例 3:
輸入:"IX"輸出:9
示例 4:
輸入:"LVIII"輸出:58解釋:C = 100, L = 50, XXX = 30, III = 3.
示例 5:
輸入:"MCMXCIV"輸出:1994解釋:M = 1000, CM = 900, XC = 90, IV = 4.
這一題的坑是 for i in range(len(s)),for循環(huán)是不受內(nèi)部語句的干擾的,從0~執(zhí)行到len(s)-1喝噪,區(qū)間是[0,len(s))础嫡。內(nèi)部語句就算有i = i + 1,也不影響執(zhí)行的次數(shù),兩個i變量是不同的兩個變量酝惧。
11. 盛最多水的容器
給定 n 個非負(fù)整數(shù) a1榴鼎,a2,...晚唇,an巫财,每個數(shù)代表坐標(biāo)中的一個點(diǎn) (i,ai) 。在坐標(biāo)內(nèi)畫 n 條垂直線哩陕,垂直線 i的兩個端點(diǎn)分別為 (i,ai) 和 (i, 0)平项。找出其中的兩條線赫舒,使得它們與x軸共同構(gòu)成的容器可以容納最多的水。
說明:你不能傾斜容器闽瓢,且n的值至少為 2接癌。
示例:
輸入:? ? ? [1,8,6,2,5,4,8,3,7]
輸出:? ? ? 49
方法:雙指針法
思路:這種方法背后的思路在于,兩線段之間形成的區(qū)域總是會受到其中較短那條長度的限制椭符。此外枯夜,兩線段距離越遠(yuǎn),得到的面積就越大艰山。
我們在由線段長度構(gòu)成的數(shù)組中使用兩個指針湖雹,一個放在開始,一個置于末尾曙搬。 此外摔吏,我們會使用變量 maxareamaxarea 來持續(xù)存儲到目前為止所獲得的最大面積。 在每一步中纵装,我們會找出指針?biāo)赶虻膬蓷l線段形成的區(qū)域征讲,更新 maxareamaxarea,并將指向較短線段的指針向較長線段那端移動一步橡娄。
最初我們考慮由最外圍兩條線段構(gòu)成的區(qū)域∈浚現(xiàn)在,為了使面積最大化挽唉,我們需要考慮更長的兩條線段之間的區(qū)域滤祖。如果我們試圖將指向較長線段的指針向內(nèi)側(cè)移動,矩形區(qū)域的面積將受限于較短的線段而不會獲得任何增加瓶籽。但是匠童,在同樣的條件下,移動指向較短線段的指針盡管造成了矩形寬度的減小塑顺,但卻可能會有助于面積的增大汤求。因?yàn)橐苿虞^短線段的指針會得到一條相對較長的線段,這可以克服由寬度減小而引起的面積減小严拒。
一次過扬绪,沒遇到問題,雙指針這個方法還是得多思考思考