剑指offer03
题目描述:
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
示例:
解答:
class Solution:
def findRepeatNumber(self, nums: List[int]) -> int:
nums.sort()
for i in range(len(nums)-1):
if nums[i]==nums[i+1]:
return nums[i]
剑指offer04
题目描述:
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
示例:
解答:
class Solution:
def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
if matrix==[]:
return False
else: #左上角元素值最小,右下角最大
i=0
j=len(matrix[0])-1
while i<=len(matrix)-1 and j>=0:
if matrix[i][j]!=target:
if matrix[i][j]>target:
j-=1
else:
i+=1
else:
return True
break
else:
return False
剑指offer06
题目描述:
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例:
解答:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reversePrint(self, head: ListNode) -> List[int]:
'''
先将链表的结点元素储存进列表
再将列表倒序
'''
res=[]
while head:
res.append(head.val)
head=head.next
return res[::-1]
剑指offer10-1
题目描述:
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例:
解答:
class Solution:
def fib(self, n: int) -> int:
if n<2:
return n
else:
res=[0,1]
for i in range(2,n+1):
res.append(res[i-2]+res[i-1])
return res[n]%1000000007
剑指offer10-2
题目描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例:
解答:
class Solution:
def numWays(self, n: int) -> int:
if n==0 :
return 1
elif n<=2:
return n
else:
a=1
b=2
res=0 #a保存f(n-2),b保存f(n-1),res保存f(n-1)+f(n-2)
for i in range(3,n+1):
res=(a+b)%1000000007
a=b
b=res
return res