蓝桥 python笔记9——时间复杂度、枚举、模拟、递归、进制转换

时间复杂度

枚举

枚举就是通过尝试所有可能的解组合来解决问题,解空间必须是离散的。

枚举的流程:

例子:百钱买百鸡

#洁净数:不包含2的数字
n=int(input())

ans=0
for i in range(1,n+1):
    if '2' not in str(i):#把数字转换成字符串,判断2是否在字符串里面
        ans+=1
print(ans)

模拟

递归

通过调用自己来解决问题

通常把大型复杂的问题转换成一个与原问题规模较小的相似问题。

写递归要先写递归出口,然后当前问题如何变成子问题。

汉诺塔问题:

def Move(n,A,B,C):
    #递归出口
    if n==0:
        return
    #n-1个盘子从A挪到B
    Move(n-1,A,C,B)
    #第n个盘子从A挪到C
    print("{}->{}".format(A,C))
    #n-1个盘子从B挪到C
    Move(n-1,B,A,C)

n=int(input())
Move(n,'A','B','C')

进制转换

任意进制转十进制:

int_to_char="0123456789ABCDEF"
char_to_int={}
for idx,chr in enumerate(int_to_char):
    char_to_int[chr]=idx

print(char_to_int)

def K_To_Ten(k,x):
    ans=0
    #将数字翻转一下
    x=x[::-1]
    for i in range(len(x)):
        ans=ans+char_to_int[x[i]]*k**i
    return ans

k=8
x='3506'
print(K_To_Ten(k,x))

十进制转任意进制:

def Ten_To_K(k,x):
    #输入:十进制数字x:int 转成k:int进制
    #输出:ans:str 转换成k进制的答案
    ans=''
    while x!=0:
        ans+=int_to_char[x%k]
        x//=k
    return ans[::-1]

k=2
x=19
print(Ten_To_K(k,x))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值