LCP 29. 乐团站位
Posted lgz0921
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LCP 29. 乐团站位相关的知识,希望对你有一定的参考价值。
题目链接:https://leetcode-cn.com/problems/SNJvJP/
思路:先算出(xPos,yPos)在第几层,然后再算出他在当前层的位置(上下左右),通过层数(不加上他在的那一层)和当前层的位置,求出他是第几个格子,然后mod 9即可。注意越界超int问题!!!
求在第几层和在当前层的哪儿个位置看图(坐标图,根据(xPos,yPos)来判断):
上代码:
class Solution {
public int orchestraLayout(int num, int xPos, int yPos) {
long a1 = num * 4L - 4;
long circle = Math.min(Math.min(yPos, num - yPos - 1), Math.min(xPos, num - xPos - 1));
long leftTop = circle, rightBottom = num - circle - 1;
long nowEdgeLen = rightBottom - leftTop + 1;
long now = 0;
if (xPos == leftTop) {
//上
now = yPos - leftTop + 1;
} else if (yPos == rightBottom) {
//右
now = nowEdgeLen - 1 + xPos - leftTop + 1;
} else if (xPos == rightBottom) {
//下
now = (nowEdgeLen - 1) * 2 + rightBottom - yPos + 1;
} else {
//左
now = (nowEdgeLen - 1) * 3 + rightBottom - xPos + 1;
}
//等差数列:Sn=a1*n+[n*(n-1)*d]/2
long n = circle;
long d = -8;
long sn = ((a1 % 9 * n % 9) % 9 + (((n * (n - 1)) / 2) % 9 * d) % 9 + 9) % 9;
return (sn + now) % 9 == 0 ? 9 : (int) ((sn + now) % 9);
}
}
以上是关于LCP 29. 乐团站位的主要内容,如果未能解决你的问题,请参考以下文章