題目:
統計所有小於非負整數 n 的質數的數量。
示例:
輸入: 10
輸出: 4
解釋: 小於 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。
厄拉多塞篩法
西元前250年,希臘數學家厄拉多塞(eeatosthese)想到了乙個非常美妙的質數篩法,減少了逐一檢查每個數的的步驟,可以比較簡單的從一大堆數字之中,篩選出質數來,這方法被稱作厄拉多塞篩法(sieve of eeatosthese)。具體操作:先將 2~n 的各個數放入表中,然後在2的上面畫乙個圓圈,然後劃去2的其他倍數;第乙個既未畫圈又沒有被劃去的數是3,將它畫圈,再劃去3的其他倍數;現在既未畫圈又沒有被劃去的第乙個數是5,將它畫圈,並劃去5的其他倍數……依次類推,一直到所有小於或等於n的各數都畫了圈或划去為止。這時,表中畫了圈的以及未劃去的那些數正好就是小於 n 的素數。
class solution(object):
def countprimes(self, n):
""":type n: int
:rtype: int
s[i : j : k]代表的意思是列表 s 中的第 i 個元素(包含), 到第 j 個元素(不包含),
每隔 k 個數取乙個 形成的列表,即步長為k取出列表子集。
"""if n < 3:
return 0
prime = [1] * n
prime[0] = prime[1] = 0
for i in range(2, int(n**0.5) +1):
if prime[i] == 1:
prime[i*i:n:i] = [0]*len(prime[i*i:n:i]) #從i平方開始遍歷不會重複計算,如15在3已經置0,在5就不用再置0了,直接從5的平方25開始計算。
return sum(prime)
Leetcode刷題之括號
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...
leetcode刷題之堆
今天終於開啟的第二個專題的刷題之旅堆,不過第乙個專題棧還有乙個小問題沒解決就是利用遞減棧去解決接雨水的問題,雖然那道題我用動態規劃的問題解決出來了,我記得看到過一道面試題,問棧和堆有什麼區別。通過搜尋網上的資料總結如下。棧 stack 由系統分配記憶體,速度較快,但是自己無法掌握。堆 一般用兩種方法...
leetcode刷題之樹
樹的三種遍歷方式 的 非遞迴版本 中序遍歷 下面的解法就是相當於 第一趟先把元素按照中序的順序進棧 第二趟 是相當於把 null標記過的位置給拿出來 class solution else return res 先序遍歷 class solution else return res 公共父節點 pu...