剑指offer
1.一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
class Solution:
def jumpFloor(self, number):
# write code here
if number <=2:
return number
prepre=1
pre=2
t=0
for i in range(2,number):
t = pre + prepre
prepre = pre
pre = t
return t
2.一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
class Solution:
def jumpFloorII(self, number):
# write code here
t=1
if number<=2:
return number
else:
for i in range(number-1):
t *= 2
return t
启发:1.2的幂次方可用左移位来做 即 return 1<<(number-1);
3.我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
斐波那契不贴代码了,主要学会分解问题。
4.输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
class Solution:
def NumberOf1(self, n):
# write code here
if n >=0 :
return bin(n).count('1')
else:
n = abs(n)-1
return 32-bin(n).count('1')
启发:https://www.cnblogs.com/cotyb/archive/2016/02/11/5186461.html
1.把一个整数减去1之后再和原来的整数做按位与,得到的结果相当于是把整数的二进制表示中最右边的一个1变成0
2.bin()是将整型转换为二进制数组成的字符串,注意它的结果是个字符串
3.可这样:
def num_of_one(num):
nbin = bin(n & 0xffffffff)
return nbin.count('1')
5.给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
def Power(self, base, exponent):
# write code here
t=1
if exponent<0:
base = 1 / base
exponent = (-1) * exponent
for i in range(exponent):
t = t * base
return t
考虑负数完整即可
评论里面有个快速幂的方法:https://blog.csdn.net/hkdgjqr/article/details/5381028
明天学一下 今天就到这里吧