Given a matrix of size r*c. Traverse the matrix in spiral form.
Example 1:
Input: r = 4, c = 4 matrix[][] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15,16}} Output: 1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 Explanation:
Example 2:
Input:
r = 3, c = 4
matrix[][] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}}
Output:
1 2 3 4 8 12 11 10 9 5 6 7
Explanation:
Applying same technique as shown above,
output for the 2nd testcase will be
1 2 3 4 8 12 11 10 9 5 6 7.
Your Task:
You dont need to read input or print anything. Complete the function spirallyTraverse() that takes matrix, r and c as input parameters and returns a list of integers denoting the spiral traversal of matrix.
Expected Time Complexity: O(r*c)
Expected Auxiliary Space: O(r*c), for returning the answer only.
Constraints:
1 <= r, c <= 100
0 <= matrixi <= 100
Practice Here:
Spirally traversing a matrix | Practice | GeeksforGeeks
Solution :
class Solution
{
public:
//Function to return a list of integers denoting spiral traversal of matrix.
vector<int> spirallyTraverse(vector<vector<int> > matrix, int r, int c)
{
vector<int> v;
int minRow =0;
int maxRow = r-1;
int maxCol = c-1;
int minCol = 0;
int i = minRow;
int j = minCol;
while(minRow<=maxRow||minCol<=maxCol){
//cout<<i<<" j:"<<j<<endl;
while((j<=maxCol&&j>=minCol)&&(i<=maxRow&&i>=minRow))
v.push_back(matrix[i][j++]);
minRow++;
j--;
i++;
//cout<<i<<" j:"<<j<<endl;
while((j<=maxCol&&j>=minCol)&&(i<=maxRow&&i>=minRow))
v.push_back(matrix[i++][j]);
maxCol--;
j--;
i--;
//cout<<i<<" j:"<<j<<endl;
while((j<=maxCol&&j>=minCol)&&(i<=maxRow&&i>=minRow))
v.push_back(matrix[i][j--]);
maxRow--;
i--;
j++;
//cout<<i<<" j:"<<j<<endl;
while((j<=maxCol&&j>=minCol)&&(i<=maxRow&&i>=minRow))
v.push_back(matrix[i--][j]);
minCol++;
j++;
i++;
}
return v;
}
};

No comments:
Post a Comment