LeetCode
斐波拉契数列
def fib(n):
if n == 1:
return 1
elif n == 2:
return 2
else:
return fib(n - 1) + fib(n - 2)
def fib2(n):
i, a, b = 0, 0, 1
while i < n:
yield b
a, b = b, a + b
i += 1
for i in fib2(6):
print(i)
杨辉三角
def triangles(n):
L = [1]
i = 0
while i < n:
yield L
L = [1] + [L[i] + L[i + 1] for i in range(len(L) - 1)] + [1]
i += 1
for i in triangles(6):
print(i)
素数
def sushu(n):
data = []
for i in range(1, n):
count = 0
for j in range(1, i + 1):
if i % j == 0:
count += 1
if count > 2:
break
if count <= 2:
data.append(i)
return data
print(sushu(20))
# 解法一:递归
def search(self, nums: List[int], target: int) -> int:
def search_num(nums, start, end, target):
mid = (start + end) // 2
if start <= end:
if target > nums[mid]:
return search_num(nums, mid + 1, end, target)
elif target < nums[mid]:
return search_num(nums, start, mid - 1, target)
else:
return mid
else:
return -1
return search_num(nums, 0, len(nums) - 1, target)
# 解法二:循环
def search(self, nums: List[int], target: int) -> int:
start = 0
end = len(nums) - 1
while start <= end:
mid = (start + end) // 2
if target > nums[mid]:
start = mid + 1
elif target < nums[mid]:
end = mid - 1
else:
return mid
return -1
def decodeString(self, s: str) -> str:
stack, res, multi = [], "", 0
for c in s:
if c == "[":
stack.append([multi, res])
res, multi = "", 0
elif c == "]":
cur_muti, last_res = stack.pop()
res = last_res + cur_muti * res
elif "0" <= c <= "9":
multi = multi * 10 + int(c)
else:
res += c
return res
# 解法一
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i, num in enumerate(nums):
for j in range(i + 1, len(nums)):
if num + nums[j] == target:
return i, j
# 解法二
def twoSum(self, nums: List[int], target: int) -> List[int]:
temp = {}
for i, v in enumerate(nums):
if (target - v) in temp:
return [temp.get(target - v), i]
else:
temp[v] = i
# 解法一:Time Limit Exceeded - 存在重复计算问题
def climbStairs(self, n: int) -> int:
if n == 1:
return 1
elif n == 2:
return 2
else:
return self.climbStairs(n - 1) + self.climbStairs(n - 2)
# 解法二:存储已经计算的值,避免重复计算
data = {}
def climbStairs(self, n: int) -> int:
if n == 1:
return 1
elif n == 2:
return 2
if n in self.data:
return self.data[n]
else:
result = self.climbStairs(n - 1) + self.climbStairs(n - 2)
self.data[n] = result
return result
# 解法三:使用循环
def climbStairs(self, n: int) -> int:
if n == 1:
return 1
elif n == 2:
return 2
result = 0
pre = 2
pre_pre = 1
for i in range(3, n + 1):
result = pre + pre_pre
pre_pre = pre
pre = result
return result
回文字符串
import re
def is_huiwenstring(data: str):
pattern = r"[a-zA-Z0-9]"
data = re.findall(pattern, data)
data = "".join([d.lower() for d in data])
if data[:] == data[::-1]:
return True
else:
return False
data = "A man a plan a canal panama"
is_huiwenstring(data)
相关拓展