科大讯飞笔试题

输入两个非负整数三维坐标(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

相关推荐

1 2 评论
分享
牛客网
牛客企业服务