LeetCode 題目-13/14/20 (python實現)
阿新 • • 發佈:2019-01-06
作為要準備踏入碼農行業的人來說,要準備校招,怎麼能不去刷刷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 。 通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫做 IIII,而是 IV。數字 1 在數字 5 的左邊,所表示的數等於大數 5 減小數 1 得到的數值 4 。同樣地,數字 9 表示為 IX。這個特殊的規則只適用於以下六種情況: I 可以放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。 X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。 C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。 給定一個羅馬數字,將其轉換成整數。輸入確保在 1 到 3999 的範圍內。 輸入: "III" 輸出: 3 輸入: "IV" 輸出: 4 輸入: "IX" 輸出: 9 輸入: "LVIII" 輸出: 58 解釋: L = 50, V= 5, III = 3. 輸入: "MCMXCIV" 輸出: 1994 解釋: M = 1000, CM = 900, XC = 90, IV = 4.
- 分析:
將羅馬數字對應的數值存入一個字典,按題目要求進行判斷換算。
class Solution: def romanToInt(self,s): lists =[] dicts ={ 'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000, } sum = 0 for i in s : lists.append(i) i = 0 while i <=len(lists)-1: if i !=(len(lists)-1): if(dicts[lists[i]]>=dicts[lists[i+1]]): sum = sum + dicts[lists[i]] i = i+1 else: sum = sum +dicts[lists[i+1]]-dicts[lists[i]] i = i+2 else: sum = sum+dicts[lists[i]] i= i+1 return sum
- 最長公共字首
- 題目要求:
編寫一個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 “”。
輸入: ["flower","flow","flight"]
輸出: "fl"
示例 2:
輸入: ["dog","racecar","car"]
輸出: ""
解釋: 輸入不存在公共字首。
- 分析:
取字串陣列中最短字串,以它為模板從頭進行比較。
class Solution: def longestCommonPrefix(self , strs): if strs==[]: return "" else: num = min([len(x) for x in strs]) strings = "" x= 0 for i in range(0,num): for l in range(0,len(strs)): if strs[0][i] !=strs[l][i]: x=1 break if x==1: break strings =strings+strs[0][i] return strings
- 有效的括號
- 題目要求:
給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字串,判斷字串是否有效。有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
輸入: "()"
輸出: true
輸入: "()[]{}"
輸出: true
輸入: "(]"
輸出: false
輸入: "([)]"
輸出: false
輸入: "{[]}"
輸出: true
- 分析:
將對應的括號存入字典,作為對應的鍵值。讀取字串strs以棧的形式進行,遇到鍵則入值則出並判斷是否符合題意。
class Solution:
def isValid(self,s):
dicts={
'(':')',
'[':']',
'{':'}',
}
if s=="":
return True
elif len(s)%2==1:
return False
else:
length = 0
list = []
while length<len(s):
if s[length] in dicts:
list.append(s[length])
print(s[length])
length = length + 1
else:
if list and s[length] == dicts[list[-1]]:
list.pop()
length=length+1
else:
return False
if list:
return False
return True