0115leetcode刷题5道python

剑指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

猜你喜欢

转载自blog.csdn.net/yeqing1997/article/details/112547931