20190401letcode练习-Easy

771.

        

class Solution:
    def numJewelsInStones(self, J: str, S: str) -> int:
        count_num = 0
        for i in range(len(S)):
            if S[i] in J:
                count_num  += 1
        return count_num

709:

class Solution:
    def toLowerCase(self, str: str) -> str:
        return (str.lower())

另外附上关于python的大小写转换函数的相应用法和解释:

name = 'AbCdEfGh'
name.upper()  # 将所有字符转成大写的表示
name.lower()   # 将所有的字符转成小写的表示
name.capitalize()  # 将字符串整体的首字母大写,其余小写
name.title()   # 将字符串中每个单词的首字母大写,其余小写
name.swapcase()  # 将所有字母进行大小写转换。
name.islower()  # 判断是否是小写
name.isupper()  # 判断是否是大写
name.istitle()  # 判断是否是字符串中,每个单词的首字母是否是大写?

3. 牛客网上的最大乘积问题:

分析:

对于python3 的实现方式,可首先对所有的输入数据进行排序(从大到小):

然后分情况讨论:

      如果输入数据个数等于3,则结果直接为排序之后的前3个的乘积;如果个数大于3;

        如果input()数据全为正数,则最大乘积就是排序之后的前三个数字的乘积。

        如果input()数据中含有负数;含有超过两个负数的,最后两个负数的绝对值较大,相乘再与第一个正数相乘,最后compare.

                                                      含有1个负数的话,不将最后的那位负数纳入考虑,因为其与所有的正数相乘均为负数,没有成为正数的可能。

n=int(input())        # 计算input()的长度
str2=input()
list=str2.split(" ")
a=[]
for i in list:
    a.append(int(i))
a.sort(reverse=True)   # 从大到小降序排列
print(max(a[0]*a[1]*a[2] , a[n-1]*a[n-2]*a[0]))   #前者是正数中的三个最大值,后者是负数中的两个绝对值最大的,然后与正数中最大相乘。

4. 牛客网上的大整数相乘:

               

分析:

注意牛客网上的在线编程笔试题,不需要自己输入数据,直接调用input(),即可在测试时,直接调用相应的输入数据。

此题的大整数相乘两行代码即可解决:
   首先对input()数据进行两个大整数的分割;

后对于里面的两个大整数取Int(),接着相乘即可得到相应的结果,转为str即可。

s = input().split(' ')
print(str(int(s[0]) * int(s[1])))

以上是一行输入数据的示例代码

5. 六一儿童节(多行输入数据的示例题)

   

分析:第一行表示儿童的个数;第三行表示巧克力的个数;

          第二行是每个儿童分到巧克力重量的界限值,实际分到的重量大于这个就上台表演,否则不上台;

           第四行是现有所有巧克力的重量,一块巧克力不能分成多块;

 对于儿童的界限值和巧克力的重量,首先排序,然后根据排序后的结果,遍历巧克力的重量list值,进行比较。

注:当含有多行数据输入时,其相应的数据传入形式。

# 下面前四行是对于有多个输入数据时的一种数据传入方式。
n=int(input())
harr=list(map(int,input().split()))
m=int(input())
marr=list(map(int,input().split()))
harr.sort()
marr.sort()
cnt=0
k=0
flag=0
for i in range(n):
    for j in range(k,m):
        if marr[j]>=harr[i]:
            cnt=cnt+1
            k=j+1
            flag=1
            break
    if flag==0:
        break
print(cnt)

6.迷宫寻路:

        

# migongwithkeys
import sys
size = sys.stdin.readline().strip().split()
m, n = int(size[0]), int(size[1])
maze = [[0]*n for i in range(m)]
for i in range(m):
    line = sys.stdin.readline().strip()
    maze[i] = list(line)
    
#钥匙的状态,就用二进制表示,最多10把钥匙,即是1024
class Node:
    def __init__(self, x, y, key, step):
        self.x = x
        self.y = y
        self.key = key  # key的状态用二进制来表示
        self.step = step

def bfs(si, sj, m, n, maze):
    from queue import Queue
    q = Queue()
    mp = [[[0]*1025 for i in range(l01)] for j in range(101)]
    nex = [[-1,0], [0,-1], [1,0], [0,1]]
    q.put(Node(si,sj,0,0))
    while not q.empty():
        node = q.get()
        for i in range(4):
            x = node.x + nex[i][0]
            y = node.y + nex[i][1]
            key = node.key
            if x <0 or x>= m or y<0 or y>=n or maze[x][y] =='0':
                continue 
            elif maze[x][y] =='3':
                return node.step +1
            elif 'a' <= maze[x][y] <= 'z':
                key = key |(1<<(ord(maze[x][y])-ord('a')))
            elif 'A' <= maze[x][y] <= 'Z' and (key & (1<<(ord(maze[x][y])-ord('A'))))==0:
                continue
            if mp[x][y][key] == 0:
                mp[x][y][key] = 1
                q.put(Node(x,y,key,node.step+1))
    return  None

if __name__ == '__main__':
    for i in range(m):
        for j in range(n):
            if maze[i][j] == '2':
                print(bfs(i,j,m,n,maze))

以上的答案没有通过。求大佬指教,在讨论区也没有找到python版本的通过版本。

7.彩色砖块:

    

分析: 读完题,仔细分析之后,发现有如下规律:
           当已给的砖块中颜色数超过2种(3,4,5,……)时,可以分析:最少出现不同颜色相近的排列规则就是AABBCC……规则,但是当颜色数大于2使,无法满足‘最多存在一对不同颜色的相邻砖块’,则结果自然就返回0

          当已给砖块颜色数为1种时,就只有一种排列方式,所以结果自然为1。

         当已给砖块颜色数为2种时,题目已经解释了,结果自然就为2.

s = list(input())
discnt = len(set(s))
if discnt > 2:
    print(0)
elif discnt == 1:
    print(1)
elif discnt == 2:
    print(2)

8. 等差数列

    

分析:判断现有的数据能否形成等差数列,如果能形成,则返回'Possible',如果不能形成,则返回'Impossible'

          首选从小到大排序,排序结束之后,只需要判断每相邻的两个数的差值是否为同一个常数,如果是同一个常数,则为等差数列,否则非等差数列(这个常数只需要计算前两的差值即可获得)。

def dengcha(A):
    A.sort()
    d = A[1] - A[0]
    for i in range(len(A)-1):
        if A[i] != A[i+1] - d:
            return 'Impossible'
    return 'Possible'
 
n = int(input())
A = list(map(int, input().split(' ')))
print(dengcha(A))

注:之前做题,没有写过太多函数,这题尝试了写成函数来进行调用,一样的思路;不同在于:先写函数,然后将输入数据传入,再在函数部分进行相应数据和参数的调用。另外:发现很多编程题中都涉及到先进行排序。记住:排序(重点,重点,重点)

猜你喜欢

转载自blog.csdn.net/Jasminexjf/article/details/88941228