蓝桥杯算法模板


最大公约数

#递归写法
def gcd(a,b):#最大公因数
	if b == 0:
		return a
	gcd(b,a%b)
#递归写法
def gcd(a,b):  #最大公因数
    while b > 0:
        a,b = b,a%b
    return a

最大公倍数

#设d位a,b的最大公约数,则a,b的最大公倍数 = a*b/d
def gcd(a,b):  #求最大公因数
    while b > 0:
        a,b = b,a%b
    return a
def lcm(a,b): #求最大公倍数
    return a*b/gcd(a,b)

杨辉三角

杨辉三角第n行第m个数可以表示为 C(m-1,n-1) = [(n-1)(n-2)(n-m+1)]/[(m-1)(m-2)*…*1]

#第8行第4个数是35
def C(m,n): #求组合公式
    up = down = 1
    for i in range(n-m+1,n+1):
        up *= i
    for j in range(1,m+1):
        down *= j
    return up//down
if __name__ == "__main__":
    print(C(3,7))

滑动窗口

有字符串answerKey = “TTFF”(只包含T和F), 整数k ,求修改字符串不超过k次后(将T改为F,或将F改为T),最长连续相同子串的长度。

该题可转化为求只包含k个“T”的最长子串长度,和只包含k个“F”的最长子串长度。
n = len(answerKey)
def get_cnt(ch):
    cnt = 0#窗口answerKey[left,right]中ch的个数
    ans = 0
    left = 0#窗口左边界
    for right in range(n):
        if answerKey[right] == ch:
            cnt += 1
        while cnt > k:
            if answerKey[left] == ch:
                cnt -= 1
            left += 1
        ans = max(ans,right-left+1)
    return ans
ans = max(get_cnt("T"),get_cnt("F"))
return(ans)

全排列

#不返回排列结果
nums = [1,2,3]
def permutation(nums,start,end):
    if start == end:
        print(nums)
        return
    for i in range(start,end):
        nums[start],nums[i] = nums[i],nums[start]#交换
        permutation(nums,start+1,end)
        nums[start],nums[i] = nums[i],nums[start]#交换
n = len(nums)
permutation(nums,0,n)

#返回排列结果
nums = [1,2,3]
def permutation(a, Already_num):
    global temp_list
    if len(a) == 0:
        temp_list.append(Already_num)
        return
    for i, element in enumerate(a):
        permutation(a[:i]+a[i+1:], Already_num+[element])
    return temp_list
temp_list = []
res = permutation(nums,[])
for item in res:
    print(item)
    
#python自带的库实现全排列
import itertools
nums = [1,2,3]
for item in itertools.permutations(nums):
	print(item)
'''排列结果
(1, 2, 3)
(1, 3, 2)
(2, 1, 3)
(2, 3, 1)
(3, 1, 2)
(3, 2, 1)'''

组合

#python自带的库实现组合
import itertools
nums = [1,2,3,4]
for item in itertools.combinations(nums,3):#3表示从nums中取3个元素进行组合
    print(item)
'''
结果如下
(1, 2, 3)
(1, 2, 4)
(1, 3, 4)
(2, 3, 4)
'''
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值