所有的剑指offer中的算法题的python实现可以查看:
最好自己画图和创建虚拟数据进行理解。
目录
3.判断101 - 200 之间有多少个素数, 并输出所有的素数
5.一球从100 米高度落下,每次落地后反弹的高度是原高度的一半;求它在第10次落地时,经过多少米?第10次反弹多高?
6.猴子吃桃问题,每天吃所剩桃子总数的一半加1 个,直到第10天,只剩下 1个桃子
8.有一组分数序列:2/1, 3/2, 5/3, 8/5, .....求出这个数列的前20 项的和
11.利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
13.现有一个排好序的数组,输入一个数,要求按原来的顺序插入到数组中
1.输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
2.用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
1. 输入某年某月某日,判断这是这一年的第几天
2.打印出 5 种不同形式的九九乘法表
(输出的数字的形式类似于第 7 道题中的打印出图形的例子, 这里可以将数字看做是 7 中的字符 * )
3.判断101 - 200 之间有多少个素数, 并输出所有的素数
5.一球从100 米高度落下,每次落地后反弹的高度是原高度的一半;求它在第10次落地时,经过多少米?第10次反弹多高?
6.猴子吃桃问题,每天吃所剩桃子总数的一半加1 个,直到第10天,只剩下 1个桃子
7.打印出特定图形
8.有一组分数序列:2/1, 3/2, 5/3, 8/5, .....求出这个数列的前20 项的和
9.求 1+2!+3!。。。+20!的累加和
10.使用递归方法求阶乘10!
11.利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
12 求一个3*3 矩阵的对角线的和
13.现有一个排好序的数组,输入一个数,要求按原来的顺序插入到数组中
剑指offer中的一些题目:
1.输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
2.用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
3.输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
4.旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
5.斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
n<=39
6.青蛙跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。算法思想:依然是斐波那切数列问题,当跳一节台阶时还有n-1个台阶,当第一次跳两个台阶时,还有n-2个台阶要跳。同样转化为斐波那契数列问题。
有公式:可以分步骤进行
7.变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
| 1 ,(n=0 )
f(n) = | 1 ,(n=1 )
| 2*f(n-1),(n>=2)
8.矩形覆盖
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
算法思想:当第一步是竖着放,右边还剩n-1个区域,当第一步横着放时,左下角应必须横着放,右边还剩n-2个区域,可以看出这仍斐波那切数列问题f(n)=f(n-1)+f(n-2)
9.求二进制 1 的个数
问题:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
10.数字的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。