变态跳台阶[剑指offer]之python实现
来源:互联网 发布:淘宝美妆 编辑:程序博客网 时间:2024/05/01 23:55
题目描述
一只青蛙一次可以跳上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操作中去)通常是常数的。
- 变态跳台阶[剑指offer]之python实现
- [牛客网,剑指offer,python] 变态跳台阶
- 剑指offer(六)之变态跳台阶
- 剑指offer之变态跳台阶
- 剑指offer之变态跳台阶
- 剑指offer之青蛙变态跳台阶
- 剑指offer之八---变态跳台阶
- 剑指offer之跳台阶&变态跳台阶
- 【剑指offer】变态跳台阶
- 【剑指offer】变态跳台阶
- 剑指offer :变态跳台阶
- 剑指Offer-变态跳台阶
- 《剑指offer》变态跳台阶
- 【剑指Offer】变态跳台阶
- 剑指offer--变态跳台阶
- 剑指offer-变态跳台阶
- 剑指offer 变态跳台阶
- 剑指offer--变态跳台阶
- ORMLite使用
- StageFright框架流程解读
- 无约束最优化算法-Newton法原理及c++编程实现
- c# json 日期中间有T 国际标准时间
- linux下make工具使用系列1
- 变态跳台阶[剑指offer]之python实现
- [FAQ14614]如何用MMU保护buddy system?
- Codevs 1260 快餐问题
- 如何绕过清单文件,动态注入activity
- 第四章 作业4
- K-th Number(poj2104)线段树维护区间+平方分割+二分搜索
- [FAQ14383]如何在内核打开栈保护功能?
- kafka安装部署
- android view 的移动的几种方式