力扣原题《螺旋矩阵》,纯手搓,已验证
给你一个 m 行 n 列的矩阵 matrix 请按照 顺时针螺旋顺序 返回矩阵中的所有元素。示例 1输入matrix [[1,2,3],[4,5,6],[7,8,9]]输出[1,2,3,6,9,8,7,4,5]示例 2输入matrix [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出[1,2,3,4,8,12,11,10,9,5,6,7]提示m matrix.lengthn matrix[i].length1 m, n 10-100 matrix[i][j] 100我的答案classSpiralOrder{private:int*rtnPointernullptr;public:vectorintspiralOrder(vectorvectorintmatrix){intheightmatrix.size();intwidth0;if(height0){widthmatrix[0].size();//这个可能为0}if(rtnPointer!nullptr){delete[]rtnPointer;rtnPointernullptr;}rtnPointernewint[width*height];if(width0){intorder0;//方向0,1,2,3(右下左上)intx10,x2width-1,y11,y2height-1;//边界inti0,j0;//坐标for(intm0;mwidth*height;m)//只需要遍历一次{rtnPointer[m]matrix[i][j];switch(order){case0://右if(jx2)//右边界方向改变{order1;x2--;i;}else{j;}break;case1://下if(iy2)//下边界方向改变{order2;y2--;j--;}else{i;}break;case2://左if(jx1)//左边界方向改变{order3;x1;i--;}else{j--;}break;case3://上if(iy1)//左边界方向改变{order0;y1;j;}else{i--;}break;default:break;}}}returnvectorint(rtnPointer,rtnPointerwidth*height);}~SpiralOrder(){delete[]rtnPointer;rtnPointernullptr;}};intmain(){vectorvectorvectorintmatrixs;intarrayMatrix1[][3]{{1,2,3},{4,5,6},{7,8,9}};intarrayMatrix2[][4]{{1,2,3,4},{5,6,7,8},{9,10,11,12}};intarrayMatrix3[][4]{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};vectorvectorintmatrix1(3,vectorint(3));vectorvectorintmatrix2(3,vectorint(4));vectorvectorintmatrix3(4,vectorint(4));for(inti0;i3;i){//此处耗时memcpy(matrix1[i][0],arrayMatrix1[i][0],3*sizeof(int));memcpy(matrix2[i][0],arrayMatrix2[i][0],4*sizeof(int));}for(inti0;i4;i){memcpy(matrix3[i][0],arrayMatrix3[i][0],4*sizeof(int));}matrixs.push_back(matrix1);matrixs.push_back(matrix2);matrixs.push_back(matrix3);SpiralOrder spiralOrder;for(inti0;imatrixs.size();i){vectorintRtnspiralOrder.spiralOrder(matrixs[i]);std::cout螺旋矩阵为:;std::copy(Rtn.begin(),Rtn.end(),std::ostream_iteratorint(std::cout, ));std::coutstd::endl;}matrix1.clear();matrix1.shrink_to_fit();matrix2.clear();matrix2.shrink_to_fit();matrix3.clear();matrix3.shrink_to_fit();matrixs.clear();matrixs.shrink_to_fit();}