1. 程式人生 > >LeetCode 題目-13/14/20 (python實現)

LeetCode 題目-13/14/20 (python實現)

作為要準備踏入碼農行業的人來說,要準備校招,怎麼能不去刷刷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
  1. 最長公共字首
  • 題目要求:
    編寫一個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 “”。
輸入: ["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
  1. 有效的括號
  • 題目要求:
    給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字串,判斷字串是否有效。有效字串需滿足:
    左括號必須用相同型別的右括號閉合。
    左括號必須以正確的順序閉合。
    注意空字串可被認為是有效字串。
輸入: "()"
輸出: 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