1.冒泡排序
def
bubblesort(nums):
for i in range(len(nums)-1):
for j in range(len(nums)-i-1):if nums[j]>nums[j+1]:
nums[j],nums[j+1] =nums[j+1],nums[j]
return nums
nums = [23,43,54,12,44,56,65]
re = bubblesort(nums)
print(re)
简单解析: 从list首端逐个对数据进行两两比较,大的往后放,外层循环一次,会在list尾端得到一个最大值,类似于冒泡行为,每次循环的最大值都固定不动,循环到最后就会出现一组从小到大的数据。
2.爬楼梯问题
基本问题:对于n阶台阶,每次只能爬1阶或者2阶,问一共有多少种爬法?
def
climb(n):
cclimb = [0,1,2]
for i in range(3,n+1):
cclimb.append(cclimb[i-1]+cclimb[i-2])
print(cclimb)
return cclimb[n]
re = climb(100)
print(re)
简单解析:可以以动态规划思想来入手,抽出子问题:n阶只可能是由n-1和n-2阶两种方式爬上来,所以把n-1和n-2的爬法相加即为n的爬法,边界条件:0阶为0,1阶为1,2阶为2;
类似于斐波那契数列,可以用递归来求解,但这样会有很多重复计算,而动态规划会以空间换取时间的思想将每一步都记录下来,进而求解。
递归可以试试,相当慢!
斐波那契数列:[0,1,1,2,3,5,8,13,21.......]
#
递归
def
f(n):
if n<1:
return 0
if n<3:
return 1
return f(n-1)+f(n-2)
print(f(100))
3.钱币找零
基本问题:有各面值钱币数个,不定,可能为0,支付某定额商品,求所支付钱币个数最少是多少
def
money():
count = [3,0,2,1,0,3,5]
value = [1,2,5,10,20,50,100]
value.sort(reverse=True)
count =count[::-1]
money = 223
re =0
for i in value:
num = min(money//i,count[value.index(i)])
money-=num*i
re+=num
if money >0:
return -1
return re
print(money())
简单解析:在保证张数足够的情况下以最大面额逐个凑齐money
原文:https://www.cnblogs.com/sima-3/p/14831375.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!