列表

详情


LCP 29. 乐团站位

某乐团的演出场地可视作 num * num 的二维矩阵 grid(左上角坐标为 [0,0]),每个位置站有一位成员。乐团共有 9 种乐器,乐器编号为 1~9,每位成员持有 1 个乐器。

为保证声乐混合效果,成员站位规则为:自 grid 左上角开始顺时针螺旋形向内循环以 1,2,...,9 循环重复排列。例如当 num = 5 时,站位如图所示

image.png

请返回位于场地坐标 [Xpos,Ypos] 的成员所持乐器编号。

示例 1:

输入:num = 3, Xpos = 0, Ypos = 2

输出:3

解释: image.png

示例 2:

输入:num = 4, Xpos = 1, Ypos = 2

输出:5

解释: image.png

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int orchestraLayout(int num, int xPos, int yPos) { } };

python3 解法, 执行用时: 40 ms, 内存消耗: 15 MB, 提交时间: 2021-05-18 15:33:51

class Solution:
    def orchestraLayout(self, num: int, xPos: int, yPos: int) -> int:
        layer = min([xPos, num - xPos - 1, yPos, num - yPos - 1])  # 位于第几圈
        v = (num*layer*4 - layer*layer*4) % 9  # 前几圈有多少个元素

        start, end = layer, num - layer

        if xPos == start:
            return (v + yPos - start) % 9 + 1

        if yPos == end - 1:
            return (v + end - start - 1 + xPos - start) % 9 + 1

        if xPos == end - 1:
            return (v + (end - start)*2 - 2 + end - yPos - 1) % 9 + 1

        if yPos == start:
            return (v + (end - start)*3 - 3 + end - xPos - 1) % 9 + 1

        return 0

上一题