Skip to content

Commit a979005

Browse files
authored
Finished 232
1 parent 1a1f081 commit a979005

File tree

1 file changed

+76
-35
lines changed

1 file changed

+76
-35
lines changed

README.md

Lines changed: 76 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2219,61 +2219,102 @@ drop直接删掉表,truncate删除表中数据,再插入时自增长id又从
22192219
## 数据结构
22202220
### 222.数组中出现次数超过一半的数字-Python版
22212221
### 223.求100以内的质数
2222+
### 224.无重复字符的最长子串-Python实现
2223+
### 225.通过2个5/6升得水壶从池塘得到3升水
2224+
### 226.什么是MD5加密,有什么特点?
2225+
### 227.什么是对称加密和非对称加密
2226+
### 228.冒泡排序的思想?
2227+
### 229.快速排序的思想?
2228+
### 230.如何判断单向链表中是否有环?
2229+
### 231.你知道哪些排序算法(一般是通过问题考算法)
2230+
### 232.斐波那契数列
2231+
2232+
**数列定义: **
2233+
2234+
f 0 = f 1 = 1
2235+
f n = f (n-1) + f (n-2)
2236+
2237+
#### 根据定义
22222238

2223-
方法一: 直接写
2239+
速度很慢,另外(暴栈注意!⚠️️) `O(fibonacci n)`
22242240

22252241
```python
2226-
primes = 3, 5, 7, 9, 11, 13, 15, 17, 19, 23, 25, 29, 31, 35, 37, 41, 43, 47, 49, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97
2242+
def fibonacci(n):
2243+
if n == 0 or n == 1:
2244+
return 1
2245+
return fibonacci(n - 1) + fibonacci(n - 2)
22272246
```
22282247

2229-
方法二: 简单算
2248+
#### 线性时间的
2249+
2250+
**状态/循环**
22302251

22312252
```python
2232-
def is_prime(n):
2233-
"""Check if number n is a prime."""
2234-
if n == 1 or not (n & 1):
2235-
return False
2236-
if n == 2:
2237-
return True
2238-
for i in range(3, int(pow(n, 0.5)), 2):
2239-
if n % i == 0:
2240-
return False
2241-
return True
2253+
def fibonacci(n):
2254+
a, b = 1, 1
2255+
for _ in range(n):
2256+
a, b = b, a + b
2257+
return a
2258+
```
22422259

2243-
primes = tuple(filter(is_prime, range(2,100)))
2260+
**递归**
2261+
2262+
```python
2263+
def fibonacci(n):
2264+
def fib(n_, s):
2265+
if n_ == 0:
2266+
return s[0]
2267+
a, b = s
2268+
return fib(n_ - 1, (b, a + b))
2269+
return fib(n, (1, 1))
22442270
```
22452271

2246-
方法三: Eratosthenes 筛 (速度想更快的话,不用 dict 而用 bytearray)
2272+
**map(zipwith)**
22472273

22482274
```python
2249-
from itertools import takewhile
2275+
def fibs():
2276+
yield 1
2277+
fibs_ = fibs()
2278+
yield next(fibs_)
2279+
fibs__ = fibs()
2280+
for fib in map(lambad a, b: a + b, fibs_, fibs__):
2281+
yield fib
2282+
2283+
2284+
def fibonacci(n):
2285+
fibs = fibs()
2286+
for _ in range(n):
2287+
next(fibs)
2288+
return next(fibs)
2289+
```
2290+
2291+
#### Logarithmic
22502292

2251-
sets = {n: True for n in range(2, 100)}
2252-
for n in takewhile(lambda x: x * x < 100, sets):
2253-
if sets[n]:
2254-
for n_ in range(n * n, 100, n):
2255-
sets[n_] = False
2293+
**矩阵**
22562294

2257-
primes = tuple(map(lambda n: n[0], filter(lambda x: x[1], sets.items())))
2295+
```
2296+
import numpy as np
2297+
def fibonacci(n):
2298+
return (np.matrix([[0, 1], [1, 1]]) ** n)[1, 1]
22582299
```
22592300

2260-
方法四: 现有的库,比如: sympy
2301+
**不是矩阵**
22612302

22622303
```python
2263-
import sympy
2264-
primes = tuple(sympy.primerange(0, 100))
2304+
def fibonacci(n):
2305+
def fib(n):
2306+
if n == 0:
2307+
return (1, 1)
2308+
elif n == 1:
2309+
return (1, 2)
2310+
a, b = fib(n // 2 - 1)
2311+
c = a + b
2312+
if n % 2 == 0:
2313+
return (a * a + b * b, c * c - a * a)
2314+
return (c * c - a * a, b * b + c * c)
2315+
return fib(n)[0]
22652316
```
22662317

2267-
2268-
### 224.无重复字符的最长子串-Python实现
2269-
### 225.通过2个5/6升得水壶从池塘得到3升水
2270-
### 226.什么是MD5加密,有什么特点?
2271-
### 227.什么是对称加密和非对称加密
2272-
### 228.冒泡排序的思想?
2273-
### 229.快速排序的思想?
2274-
### 230.如何判断单向链表中是否有环?
2275-
### 231.你知道哪些排序算法(一般是通过问题考算法)
2276-
### 232.斐波那契数列
22772318
### 233.如何翻转一个单链表?
22782319
### 234.青蛙跳台阶问题
22792320
### 235.两数之和 Two Sum

0 commit comments

Comments
 (0)