修仙从入门到放弃——炼气期2021.04.10

267 阅读2分钟

昨日复盘

1.好好打扫卫生

2.leetcode——LCP 29. 乐团站位

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

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

1616125411-WOblWH-image.png

请返回位于场地坐标 [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又是对的,所以感觉还是数有问题,但是想不通哪里有问题。今天还是迷茫的我。