科大讯飞笔试题

输入两个非负整数三维坐标(x1,y1,z1)和(x2,y2,z2),判断第一个是否能通过坐标变换 到第二个坐标。
允许4种变换:
1.交换x,y
2.交换x,z
3.交换y,z
4.(x,y,z) => (2y-x+1, 2x-y-1, z)
变换过程要求 0 <= x, y, z <= n  n为输入值。
怎么编程实现这道题??
#互联网求职##笔试题目##科大讯飞#
全部评论
class Solution:     def move(self, n, x1, y1, z1, x2, y2, z2) -> bool:         if x1 + y1 + z1 != x2 + y2 + z2:             return False         x1, y1, z1 = sorted((x1, y1, z1))         x2, y2, z2 = sorted((x2, y2, z2))         if x1 == x2 and y1 == y2:             return True         if x2 % 3 == y2 % 3 == z2 % 3:             return False         mymap = set()         mylist = [(x1, y1, z1)]         while mylist:             x, y, z = mylist.pop()             if x == x2 and y == y2:                 return True             if (x, y) not in mymap:                 mymap.add((x, y))                 for (x, y, z) in [(x, y, z), (x, z, y), (y, x, z), (y, z, x), (z, x, y), (z, y, x), ]:                     if 0 <= 2 * y - x + 1 <= n and 0 <= 2 * x - y - 1 <= n:                         x, y, z = sorted((2 * y - x + 1, 2 * x - y - 1, z))                         if (x, y) not in mymap:                             mylist.append((x, y, z))         return False 本地运行,n=3000 坐标1500左右,时间3.4s
点赞 回复 分享
发布于 2021-08-01 17:42

相关推荐

在笔试的大西瓜很矫健:校招数分不用想了,这经历和学历都不够用,大厂更别想,初筛都过不了,说点不好听的小厂数分都进不去(小厂也是假数分),要两个对口实习+3个项目(或者3+2),而且要有含金量才能补一点你的学历劣势。 建议刷实习,社招找数分,校招看运气,能入行业就行,可以运营转数分
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务