力扣刷题笔记:(简单难度)剑指 Offer 29. 顺时针打印矩阵

力扣刷题笔记:(简单难度)剑指 Offer 29. 顺时针打印矩阵


题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。


分析

1,把数组看成一个一个的层包围,由外向内拨开洋葱的心。
2,定义每一层最左上,最右下两个点的左边(lx,ly)(rx,ry)
3,点已经给你了,所以你把每一层的四条边遍历赋给p[i],对应我代码里的四个for循环
4,第3步结束后,把左上的点的x,y坐标都+1,右下的点的x,y坐标都-1,返回第3步
提示,遍历层的某一层中的n某一个边完成之后,如果i==num也就是数组的大小会跳出循环,之后返回p即可

代码片段

int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
 if(!matrixSize){
 *returnSize=0;
  return NULL;
 }             //数组为0返回空

int num=matrixSize*(*matrixColSize);
int *p=(int *)malloc(sizeof(int)*num);
*returnSize=num;

int lx=0,ly=0,rx=matrixSize-1,ry=*matrixColSize-1;//定义点
int i=0,j;
while(i<num)
{
    for(int j=ly;j<=ry;j++)
     p[i++]=matrix[lx][j];
     if(i==num)break;
    for(int j=lx+1;j<=rx;j++)
     p[i++]=matrix[j][ry];
          if(i==num)break;
    for(int j=ry-1;j>=ly;j--)
     p[i++]=matrix[rx][j];
          if(i==num)break;
    for(int j=rx-1;j>lx;j--)
     p[i++]=matrix[j][ly];
          if(i==num)break;
    lx++;
    ly++;
    rx--;
    ry--;
}
return p;
}

总结

CSDN的编辑器真的LJ,代码粘贴试了一堆方法都是错的。最后在富文本编辑器编辑了才能放进来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值