Python编程

剑指offer

1. 全排列

题目描述

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

示例1

输入

[3,32,321]

返回值

"321323"
# -*- coding:utf-8 -*-
"""
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,
打印能拼接出的所有数字中最小的一个
"""
import itertools   #使用模块产生可迭代对象
class Solution(object):
    def PrintMinNumber(self, numbers):
        # write code here
        assert len(numbers)>0 #
        lis = []
        for l in list(itertools.permutations(numbers)):#全排列迭代成元组
            str0 = [str(i) for i in l] #l为元组类型转换成字符列表str0
            l = ''.join(str0) #将字符数字连接成整体字符串
            lis.append(int(l))#将字符l转换成整型存入到lis列表中
        return min(lis)#返回lis列表中的最小值
    
    
# -*- coding:utf-8 -*-
import itertools
class Solution:
    def PrintMinNumber(self, numbers):
        if len(numbers)==0:
            return ""
        if len(numbers)==1:
            return numbers[0]
        res=[]
        for i in numbers:
            res.append(str(i))
        temp = list(set(map("".join, itertools.permutations(res))))
        return str(min(temp))
    

join():连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串

map(function, iterable, ...)会根据提供的函数对指定序列做映射。第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

2. 斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

0、1、2、3、5、8、

#1、递归方法,python调试过程中速度太慢没有通过
class Solution:
    def Fibonacci(self,n):
        if n<=1:
            return n
        else:
            return self.Fibonacci(n-1)+self.Fibonacci(n-2)
#2、利用for循环语句与数列的方法进行运算,将数列加入列表中,并对最后一个元素进行返回。
class Solution:
    def Fibonacci(self, n):
        num = []
        for i in range(n+1): #最后1个数字不包含
            if i == 0:
                num.append(0)
            elif i == 1:
                num.append(1)
            else:
                num.append(num[-1]+num[-2])
        return num[-1] #list[-1]表示最后一个元素,list[-2]表示倒数第二个元素

3. 最大连续子序列

输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).

示例1

输入:

[1,-2,3,10,-4,7,2,-5]

复制

返回值:

18
输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},因此输出为该子数组的和 18。 
设dp[i]为以下标i元素结尾的最大和
递推式:dp[i]=max(dp[i-1]+array[i],array[i])
初始状态 dp[0]=array[0]
思路就是:如果该元素之前的最大和加上当前元素值 小于 当前元素,那就从当前元素重新开始计算,否则按两者加和作为此处的最大和。
最后得到的dp数组中最大的那一个,就是答案。

class Solution:
    def FindGreatestSumOfSubArray(self, array):
        # write code here
        dp = [0]*len(array)
        dp[0] = array[0]
        #或直接拷贝一份:dp = array[:],修改dp不会修改array
        for i in range(1,len(array)): #因为有i-1,所以要从1开始循环
            dp[i] = max(dp[i-1] + array[i], array[i])
        return max(dp)

4. 跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

f(0)=0,f(1) = 1, f(2) = 2, f(3) = 3, f(4) = 5… 可以总结出f(n) =f(n-1) +f(n-2)的规律

class Solution:
    def jumpFloor(self, number):
        # write code here
        num = []
        for i in range(number+1): #最后1个数字不包含
            if i == 0:
                num.append(0)
            elif i == 1:
                num.append(1)
            elif i == 2:
                num.append(2)
            else:
                num.append(num[-1]+num[-2])
        return num[-1] #list[-1]表示最后一个元素,list[-2]表示倒数第二个元素

5. 二维数组遍历

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

[

[1,2,8,9],
[2,4,9,12],
[4,7,10,13],
[6,8,11,15]

]

给定 target = 7,返回 true。

给定 target = 3,返回 false。

class Solution:
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python编程PDF是一本关于Python编程语言的电子书,它可以通过PDF文件的形式在线阅读或下载。这本书旨在向初学者介绍Python编程语言,并提供了从基础概念到高级技巧的详尽说明和示例代码。 Python作为一种简单易学、功能强大的编程语言,已经成为人们最喜爱的入门语言之一。对于初学者来说,掌握基本的语法和概念是非常重要的。这本Python编程PDF可以帮助读者逐步学习Python的语法、数据类型、循环和条件语句等基础知识。它还提供了许多练习题和实例代码,帮助读者理解和应用所学的知识。 此外,Python编程PDF还介绍了Python的高级特性和库。Python拥有丰富的库和模块,可以用于各种任务,比如数据分析、网络编程和Web开发等。这本书详细介绍了一些流行的Python库,如NumPy、Pandas和Django,以及它们在实际项目中的应用示例。 对于已经有一定Python编程经验的读者来说,这本Python编程PDF也是一本很好的参考书。它深入讲解了一些高级主题,如函数式编程和面向对象编程,并提供了一些实用的技巧和建议,帮助读者更好地利用Python编写高效、可维护的代码。 总之,Python编程PDF是一本综合而详尽的Python编程指南,适合初学者和有经验的程序员。它通过清晰的语言和丰富的示例帮助读者掌握Python的基础知识和高级技巧,并引导读者在实际项目中应用所学的知识。无论是想学习Python编程的新手还是希望提升自己编程技能的读者,这本书都是一个很好的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值