参加了华为的补招,一共三道题,满分600分,AC两道,400分就溜了
T1.顺时针旋转矩阵
输入n,表示正方形矩阵大小,再输入矩阵,最后输入m
m表示顺时针旋转90°的次数
输出旋转后得到的矩阵
eg:
输入:
3
1 2 3
4 5 6
7 8 9
2
输出:
9 8 7
6 5 4
3 2 1
解释:
第一次顺时针旋转90°得到
7 4 1
8 5 2
9 6 3
第二次得到
9 8 7
6 5 4
3 2 1
把矩阵转置的代码稍微修改一下
#矩阵转置代码
[ [row[i] for row in A] for i in range(len(A)) ]
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# datetime:2020-03-04 18:58
# software: PyCharm
import sys
if __name__ == "__main__":
# 读取第一行的n
n = int(sys.stdin.readline().strip())
ans = 0
A=[]
for i in range(n):
# 读取每一行
line = sys.stdin.readline().strip()
# 把每一行的数字分隔后转化成int列表
values = list(map(int, line.split()))
A.append((values))
m = int(sys.stdin.readline().strip())
m = m%4
def transpose(A):
B= [[x[i] for x in A] for i in range(len(A[0]))]
C=[]
#每一行进行取逆
for line in B:
C.append(line[::-1])
return C
#print(n,m)
for _ in range(m):
A=transpose(A)
#输出
for i in range(n):
for j in range(n):
if j==n-1:
print(A[i][j])
else:
print(A[i][j], end = " ")
T2.n个小朋友,k个苹果,输出分配苹果的不同方法,和具体怎么分配
eg:
n=2 k=3
输出:
4
xxx|
xx|x
x|xx
|xxx
不会写。。
T3.编辑距离改编题
输入n,接下来2n行,前n行表示待修改文章,后n行表示已修改文章
输出从待修改文章到已修改文章最少编辑的次数
一次编辑:删除 添加 替换都算一次编辑
eg:
输入:
2
abcdef
2334
bcdg
123
输出:
解释:abcdef–> 删除a --> bcdef -->删除e -->bcdf -->f替换成g ,编辑3次
234–>插入1 -->1234–>删除4–> 123,编辑2次
最终输出5次
解法:动态规划
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# datetime:2020-03-04 19:41
# software: PyCharm
import sys
if __name__ == "__main__":
def minDistance(word1:str,word2:str):
n1=len(word1)
n2=len(word2)
dp=[[0]*(n2+1) for _ in range(n1+1)]
for j in range(1,n2+1):
dp[0][j]=dp[0][j-1]+1
for i in range(1,n1+1):
dp[i][0]=dp[i-1][0]+1
for i in range(1,n1+1):
for j in range(1,n2+1):
if word1[i-1]==word2[j-1]:
dp[i][j]=dp[i-1][j-1]
else:
dp[i][j]=min(dp[i][j-1],dp[i-1][j],dp[i-1][j-1])+1
return dp[-1][-1]
n = int(sys.stdin.readline().strip())
A=[]
B=[]
for _ in range(n):
a=sys.stdin.readline().strip()
A.append(a)
for _ in range(n):
b = sys.stdin.readline().strip()
B.append(b)
res=0
for i in range(n):
k=minDistance(str(A[i]),str(B[i]))
res+=k
print(res)