0130leetcodeは5つのPythonの質問をブラシします

208

タイトルの説明:
挿入、検索、startsWithの3つの操作を含む、Trie(プレフィックスツリー)を実装します。

例:
ここに画像の説明を挿入
回答:

class Trie:

    def __init__(self):
        """
        Initialize your data structure here.
        """
        self.root={
    
    }
        self.end_of_word='#'


    def insert(self, word: str) -> None:
        """
        Inserts a word into the trie.
        """
        node=self.root
        for char in word:
            node=node.setdefault(char,{
    
    }) #字典的内置函数setdefault()
        node[self.end_of_word]=self.end_of_word
        


    def search(self, word: str) -> bool:
        """
        Returns if the word is in the trie.
        """
        node=self.root

        for char in word:
            if char in node:
                node=node[char]
            else:
                return False
        if self.end_of_word in node:
            return True
        else:
            return False



    def startsWith(self, prefix: str) -> bool:
        """
        Returns if there is any word in the trie that starts with the given prefix.
        """
        node=self.root

        for char in prefix:
            if char in node:
                node=node[char]
            else:
                return False
        return True
        


# Your Trie object will be instantiated and called as such:
# obj = Trie()
# obj.insert(word)
# param_2 = obj.search(word)
# param_3 = obj.startsWith(prefix)

273

タイトルの説明;
負でない整数numを対応する英語表現に変換します。

例:
ここに画像の説明を挿入
回答:

class Solution:
    def numberToWords(self, num: int) -> str:
        d1=['','One','Two','Three','Four','Five','Six','Seven','Eight','Nine','Ten','Eleven','Twelve','Thirteen','Fourteen','Fifteen','Sixteen','Seventeen','Eighteen','Nineteen','Twenty']
        d2=['','Ten','Twenty','Thirty','Forty','Fifty','Sixty','Seventy','Eighty','Ninety']
        if num==0:return 'Zero'
        if num<=20:return d1[num]
        if num<100:
        	t,d=num//10,num%10
        	return d2[t]+' '+d1[d] if d>0 else d2[t]

        if num<1000:
        	h=num//100
        	if num%100==0:return d1[h]+' Hundred'
        	return d1[h]+' Hundred '+self.numberToWords(num%100)
        
        if num<10**6:
        	th=num//10**3
	        if num%10**3==0:
	        	return self.numberToWords(th)+' Thousand'	                	
        	return self.numberToWords(th)+' Thousand '+self.numberToWords(num%10**3)

        if num<10**9:
        	mi=num//10**6
	        if num%10**6==0:
	        	return self.numberToWords(mi)+' Million'        	                	
        	return self.numberToWords(mi)+' Million '+self.numberToWords(num%10**6)

        if num<10**12:
        	bi=num//10**9
	        if num%10**9==0:
	        	return d1[num//10**9]+' Billion'                        	
        	return self.numberToWords(bi)+' Billion '+self.numberToWords(num%10**9)

459

タイトルの説明:
空でない文字列が与えられた場合、それが複数回繰り返される部分文字列で構成できるかどうかを判断します。指定された文字列には小文字の英字のみが含まれ、長さは10,000を超えません。

例:
ここに画像の説明を挿入
回答:

class Solution:
    def repeatedSubstringPattern(self, s: str) -> bool:
        '''
        假设母串S是由子串s重复N次而成, 则 S+S则有子串s重复2N次, 
        那么现在有:S=Ns, S+S=2Ns, 其中N>=2。 
        如果条件成立, S+S=2Ns, 掐头去尾破坏2个s,S+S中还包含2*(N-1)s, 
        又因为N>=2, 因此s在(S+S)[1:-1]中必出现一次以上

        假设母串S由子串a+b组成,则(S+S)=a+b+a+b,
        掐头去尾,则开头的a和最后的b无法匹配,相当于(S+S)[1:-1] = c+b+a+d ,
        其中c!=a, d!=b,如果a+b在其中出现,则必然有a=b
        '''
        return s in (s+s)[1:-1]

686

タイトルの説明:
2つの文字列aとbが与えられた場合、文字列aが繰り返し重ね合わされる最小回数を見つけて、文字列bが重ね合わされた文字列aの部分文字列になり、存在しない場合は-1を返します。
注:文字列「abc」は、0回繰り返されると「」、「abc」は1回繰り返され、「abcabc」は2回繰り返されます。

例:
ここに画像の説明を挿入
回答:

class Solution:
    def repeatedStringMatch(self, a: str, b: str) -> int:
        #关键在于终止长度,2*a+b
        n=(len(b)*2)//(len(a))+1
        for i in range(1,n+2):
            if b in a*i:
                return i
        return -1

724

タイトルの説明:
整数型の配列numsを指定して、配列の「センターインデックス」を返すことができるメソッドを記述してください。
配列の中心インデックスを次のように定義します。配列の中心インデックスの左側にあるすべての要素の合計は、右側にあるすべての要素の合計に等しくなります。
配列に中央インデックスがない場合は、-1を返す必要があります。配列に複数の中央インデックスがある場合は、左に最も近いものを返す必要があります。

例:
ここに画像の説明を挿入
回答:

class Solution:
    def pivotIndex(self, nums: List[int]) -> int:
        S=sum(nums)
        left=0
        for i in range(len(nums)):
            right=S-nums[i]-left
            if right==left:
                return i
            left+=nums[i]
        return -1

おすすめ

転載: blog.csdn.net/yeqing1997/article/details/113243081