2026/4/18 12:05:20
网站建设
项目流程
学做网站看什么书,wordpress会员充值,网站信息,网站标题在线制作Problem: 885. Spiral Matrix III 螺旋矩阵 III 解题过程 防止越界的问题#xff0c;所以扩展了边界的#xff0c;将矩阵复制到中间#xff0c;方向累加的#xff0c;取模4#xff0c;长度len在方向上前进len步#xff0c;当该格子访问过时#xff0c;才累加长度len所以扩展了边界的将矩阵复制到中间方向累加的取模4长度len在方向上前进len步当该格子访问过时才累加长度len避免了越界问题Codeclass Solution { public: vectorvectorint spiralMatrixIII(int rows, int cols, int rStart, int cStart) { vectorvectorbool status( 301, vectorbool(301, false) ); vectorvectorint matrix(301, vectorint(301, -1)); vectorvectorint ret; ret.push_back({rStart, cStart}); rStart 100; cStart 100; for(int i 0; i rows; i) { for(int j 0; j cols; j) { matrix[i 100][j 100] 0; } } int len 1, direction 1, sum rows * cols, k, x, y; if(ret.size() sum) return ret; status[rStart][cStart] true; while(sum 0) { k len; while(k 0) { x rStart; y cStart; if( direction % 4 1 ) { cStart; } else if( direction % 4 2 ) { rStart; } else if( direction % 4 3 ) { --cStart; } else { --rStart; } if(status[rStart][cStart] true) { rStart x; cStart y; direction (direction - 1 4) % 4; len; k 1; continue; } if(matrix[rStart][cStart]0) { ret.push_back({rStart-100, cStart-100}); if(ret.size() sum) { return ret; } } status[rStart][cStart] true; k--; } direction; } return {{}}; } };官方题解的答案class Solution { public: vectorvectorint spiralMatrixIII(int rows, int cols, int rStart, int cStart) { vectorvectorint ret {{rStart, cStart}}; int sum rows * cols; if(sum 1) { return ret; } for(int i 1; i rows * cols * 2; i) { if( (i1)1 ) { for(int j 0; j i; j) { cStart; if(rStart0 rStart rows cStart0 cStart cols) { ret.push_back({rStart, cStart}); } } for(int j 0; j i; j) { rStart; if(rStart0 rStart rows cStart0 cStart cols) { ret.push_back({rStart, cStart}); } } } else { for(int j 0; j i; j) { cStart--; if(rStart0 rStart rows cStart0 cStart cols) { ret.push_back({rStart, cStart}); } } for(int j 0; j i; j) { rStart--; if(rStart0 rStart rows cStart0 cStart cols) { ret.push_back({rStart, cStart}); } } } if(ret.size() sum) { return ret; } } return {{}}; } };