剑指offer 题解
- 10-I 斐波那契数列[∞](https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/)
- 10-II 青蛙跳台阶问题[∞](https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/)
- 11 旋转数组的最小数字[∞](https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/)
- 15. 二进制中1的个数[∞](https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/)
10-I 斐波那契数列∞
求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
答案需要取模 1e9+7(1000000007)
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
10-II 青蛙跳台阶问题∞
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007)
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
可递推为斐波那契数列:
- 设跳上n级台阶有f(n)种跳法,其最后一步有两种跳法:跳1级或跳2级
- 那么跳上n级台阶可以分解为两种跳法:
1. 跳上n-1级台阶,再跳1级台阶
2. 跳上n-2级台阶,再跳2级台阶 - 于是,f(n)=f(n-1)+f(n-2),其中f(1)=1,f(2)=2。
11 旋转数组的最小数字∞
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。
二分查找(从中间向两边找):
- left:若a[left-1]<=a[left],left–;否则return a[left]
- right:若a[right+1]>=a[right],right++;否则return a[right+1]
- 若全扫完,return a[0] (比如a={1,1,1})
15. 二进制中1的个数∞
请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。
位运算:n&=n-1
原理:一个数n和一个比它小1的数n-1进行与&运算后,得到的结果会消除最低位的1。