昨日复盘
1.好好打扫卫生
2.leetcode——LCP 29. 乐团站位
某乐团的演出场地可视作 num * num 的二维矩阵 grid(左上角坐标为 [0,0]),每个位置站有一位成员。乐团共有 9 种乐器,乐器编号为 1~9,每位成员持有 1 个乐器。
为保证声乐混合效果,成员站位规则为:自 grid 左上角开始顺时针螺旋形向内循环以 1,2,...,9 循环重复排列。例如当 num = 5 时,站位如图所示
请返回位于场地坐标 [Xpos,Ypos] 的成员所持乐器编号。
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/SN… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
第一次提交——解答错误
第二次提交——解答错误
第二次就是将第一次的int 改为了long,今天还没改好有点迷茫。
class Solution {
public int orchestraLayout(int num, int xPos, int yPos) {
//计算 x,y 位置是第几个数
//num 横排竖排有几个数
//没有圈。1就是1 ,2就是1,2,3,4 2*4-4=4
//第一圈 4*5-4 16
//总共有多少个数,位于那个圈,
// ( num-1)*4 (num-2)*4=(num-3)*4 num=1
if(xPos<num && yPos<num){
long ave=num/2;
long model=num%2;
long row,column;
long sum=0;
//计算行列
if(xPos<ave)
{
row=xPos+1;
}else{
row=num-xPos;
}
if(yPos<ave)
{
column=yPos+1;
}else{
column=num-yPos;
}
long circle_num=Math.min(row,column);//计算所在圈
if(circle_num>ave){
sum= (((long)((circle_num-1)*(num -circle_num)))*4) +1;
;
}else{
circle_num=circle_num-1;
long a_count= (((long)(circle_num*(num- circle_num)))*4);//之前整圈数的总和
long other_count=0;
if(xPos==circle_num){
other_count=yPos-circle_num+1;
}else if(xPos==num-circle_num-1){
other_count=((num-2*circle_num)*2-1)+(num-circle_num-yPos-1);
}else if(yPos==circle_num){
other_count=((num-2*circle_num)*3-2)+(num-circle_num-1-xPos);
}else if(yPos==num-circle_num-1){
other_count=(num-2*circle_num)+(xPos);
}
sum=a_count +other_count ;
}
// return (int)sum;
if(sum%9!=0){
return (int)sum%9 ;
}else{
return 9 ;
}
}else{
return Math.max(xPos,yPos)-(num-1);
}
}
}
测试用例
2511 1504 1550
如果是2511 1504 1520又是对的,所以感觉还是数有问题,但是想不通哪里有问题。今天还是迷茫的我。