배열 101: 나선형 순회
1871 단어 codenewbietutorialcppbeginners
의문:
n개의 행과 m개의 열이 있는 2차원 배열이 주어집니다.
나선형 순서로 1차원 배열을 출력해야 합니다.
입력:
입력배열[][] ={
{1, 2, 3, 4},
{12,13,14,5},
{11,16,15,6},
{10, 9, 8, 7},
}
산출:
{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
해결책
주어진 배열을 오른쪽, 아래쪽, 왼쪽 및 위쪽 방향으로 순회합니다.
한 코너 케이스는 나선형 1D 배열의 전체 요소가 이미 행*열과 같은지 확인해야 한다는 것입니다.
vector<int> spiralTraverse(vector<vector<int>> array) {
int column = array[0].size();
int row = array.size();
vector<int>spiralArray; // output array
int i = 0, j = 0, x = 0;
int rowCount = row -1;
int columnCount = column;
int count=0;
while (spiralArray.size() < row*column) {
x = 0;
while (x < columnCount) {
spiralArray.push_back(array[i][j]);
j++, x++; count++;
} //traverse right side through columns
j--;
columnCount--;
i++; x = 0;
if(count < row*column)
while (x < rowCount) { // traverse downwards through rows
spiralArray.push_back(array[i][j]);
i++, x++; count++;
}
rowCount--;
x = 0, i--;
j--;
if(count < row*column)
while (x < columnCount) { // traverse left side
spiralArray.push_back(array[i][j]);
j--, x++; count++;
}
columnCount--;
j++;
i--;
x = 0;
if(count < row*column)
while (x < rowCount) { // traverse upward through rows
spiralArray.push_back(array[i][j]);
i--, x++; count++;
}
rowCount--;
i++;
j++;
}
return spiralArray;
}
Reference
이 문제에 관하여(배열 101: 나선형 순회), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ashchk/array-101-spiral-traversal-2nah텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)