阿里巴巴3.14笔试编程题

1.
def count2(x):
    if x < 0:
        x = x & 0xffffffff
    bin2 = str(bin(x))[2: ]
    result = 0
    for i in str(bin2):
        if i == '1':
            result += 1
    return result

x = str(input())
y = int(x, 16)
print(count2(y))

2.(补一下第二题的思路)
    只要求出0点所在的行和列(四个方向)有没有1就可以了。
    但是貌似python不支持列的区间表达式,所以先求原始矩阵的0所在行有没有1,再将矩阵90°旋转之后求新的矩阵的0所在行有没有1,最后结果相加即可。边界处理的话就是在矩阵外面围一层2即可。
def light(array):
    result = 0
    for i in range(1, len(array) - 1):
        for j in range(1, len(array[0]) - 1):
            if array[i][j] == 1:
                continue
            else:
                if 1 in array[i][1: j]:
                    result += 1
                if 1 in array[i][j + 1: ]:
                    result += 1
    return result


arr = []
nm = list(map(int, input().strip().split()))
t1 = [2] * (nm[1] + 2)
arr.append(t1)
for i in range(nm[0]):
    temp = list(map(int, input().strip().split()))
    temp = [2] + temp + [2]
    arr.append(temp)
arr.append(t1)

arr2 = list(map(list, zip(*arr)))[:: -1]
print(light(arr) + light(arr2))

3.
没时间看了😂
#暑期实习##笔经##阿里巴巴##java工程师#
全部评论
为啥我的题和你的不一样🙃
点赞 回复 分享
发布于 2022-03-14 20:57

相关推荐

不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:池是池,发是发,我曾池,我现黑
点赞 评论 收藏
分享
评论
1
3
分享
牛客网
牛客企业服务