蓝桥杯备战--python

基础


一、力扣496(目标和)

题目描述

给你一个整数数组 nums 和一个整数 target 。
向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :
例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。
返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。

示例1
输入:nums = [1,1,1,1,1], target = 3
输出:5
解释:一共有 5 种方法让最终目标和为 3 。
-1 + 1 + 1 + 1 + 1 = 3
+1 - 1 + 1 + 1 + 1 = 3
+1 + 1 - 1 + 1 + 1 = 3
+1 + 1 + 1 - 1 + 1 = 3
+1 + 1 + 1 + 1 - 1 = 3

示例2:
输入:nums = [1], target = 1
输出:1

解题思路
利用dfs(深度优先搜索)即直接选一条路走到底后,接着再选择一条路
代码

nums=list(map(int,input().split()))
target=int(input())
def dfs(cur,i,d):
    if i<len(nums) and (cur,i) not in d:
        d[(cur,i)]=dfs(cur+nums[i],i+1,d)+dfs(cur-nums[i],i+1,d)
    return d.get((cur,i),int(cur==target))
d={}
s=dfs(0,0,d)
print(s)

二、寻找2020

题目描述

小蓝有一个数字矩阵,里面只包含数字 0 和 2。
小蓝很喜欢 2020,他想找到这个数字矩阵中有多少个 2020 。
小蓝只关注三种构成 2020 的方式:
• 同一行里面连续四个字符从左到右构成 2020。
• 同一列里面连续四个字符从上到下构成 2020。
• 在一条从左上到右下的斜线上连续四个字符,从左上到右下构成 2020。
例如,对于下面的矩阵:
220000
000000
002202
000000
000022
002020
一共有 5 个 2020。其中 1 个是在同一行里的,1 个是在同一列里的,3 个是斜线上的。
小蓝的矩阵比上面的矩阵要大,由于太大了,他只好将这个矩阵放在了一个文件里面,在试题目录下有一个文件 2020.txt,里面给出了小蓝的矩阵。
请帮助小蓝确定在他的矩阵中有多少个 2020。

解题思路
就是简单的模拟问题,就是寻找2020水平的和斜线的

代码

ls=[]
f=open("./2020 .txt",'r')   #打开文件夹,以只读的方式
while True:
    line=f.readline()
    if line[-1]!='\n':
        ls.append(list(line))
        break
    else:
        line=line[:-1]
    m=list(line)
    ls.append(m)
f.close()
x=len(ls)
y=len(ls[0])
count=0
for i in range(x):
    for j in range(y):
        if ls[i][j]=='2':
            if j+3<y:
                if ls[i][j]+ls[i][i+1]+ls[i][j+2]+ls[i][j+3]=='2020':
                    count+=1
            if i+3<x:
                if ls[i][j]+ls[i+1][j]+ls[i+2][j]+ls[i+3][j]=='2020':
                    count+=1
            if (i+3<x) and (j+3<y):
                if ls[i][j]+ls[i+1][j+1]+ls[i+2][j+2]+ls[j+3][j+3]=='2020':
                    count+=1
print(count)

总结

每天进步一点点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值