变态跳台阶[剑指offer]之python实现

本文通过一个具体的例子——青蛙跳台阶问题,详细介绍了如何利用Python编程解决递推问题。通过逐步构建递推公式并实现算法,展示了不同跳法的计数方法。同时,对比了Python中append与insert操作的效率,为读者提供了算法优化的思路。
摘要由CSDN通过智能技术生成

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

题目链接

# -*- coding:utf-8 -*-
class Solution:
    def jumpFloorII(self, number):
        # write code here
        ans=[];
        ans.append(0);
        ans.append(1);
        ans.append(2);
        for i in range(3 , number+1):
            sum=1;
            for j in range(1,i):
                sum+=ans[j];
            ans.append(sum);
        return ans[number];

跳楼梯的方式有多种供选择,考虑写一层循环,找到所有的方法;

python中append的效率比 insert的效率要高:

Python中的列表则与此不同。它不是由若干个独立的节点相互引用而组成的,而是一整块单一连续的内存区块–我们通常称之为数组。这直接导致其与链表之间的一些区别。例如,尽管两者在遍历时的效率相差无几(除了链表有一些额外开销),但是如果我们按照既定索引值对某元素进行直接访问的话,显然使用数组会更加的高效。因为在数组中,我们通常可以直接计算出目标元素在内存中的位置,并对其进行直接访问。而对于链表,我们需要从头开始遍历整个链表。
但是对于insert操作来说,情况又有所不同。对于链表而言,只要知道了在哪里执行insert操作,其操作成本是非常低的。无论该链表中有多少元素,其操作时间大致相同。但是,对于数组而言,每次执行insert操作都需要移动插入点右边所有的元素,甚至在必要时需要把所有数组元素复制到另外一个更大的数组中。也正因如此,append操作通常会采用一种被称为动态数组或向量的特定解决方案。其主要思路是将内存分配的过大一些,并且等到其溢出时,在线性时间内再次重新分配内存。但这样做似乎会使得append操作变得跟insert操作一样糟糕。其实不然,因为尽管这两种情况会迫使我们去搬动大量的元素,但主要的不同点在于,对于append操作,发生这样的可能性要小得多。事实上,只要我们能确保每次所搬入的数组都大过原数组一定的比例(例如20%甚至100%),那么该操作的平均成本(或者说的更确切一些,将这些搬运开销均摊到每次append操作中去)通常是常数的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值