順時針打印矩陣
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
You should return [1,2,3,6,9,8,7,4,5].
解題思路以下:
視察矩形 以下 看成1個圈 上行 右列 下行 左列
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
設 rowstart=0 rowend=2 colstart=0 colend=2 分別辨識行的起始、結束 和列的起始和結束
打印先從第1行開始 也就是 1 2 3 開始 此時
接著打印當前 最右側列 6 9
接著打印當前最下邊行 8 7
接著打印 4
上面為1個圈,接著循環就是,直到 rowstart > rowend 或 colstart > colend
代碼以下:
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int> result;
if(matrix.size()==0)
return result;
int m=matrix.size()⑴;
int n=matrix[0].size()⑴;
int sn=0;
int sm=0;
int i;
while(true)
{
for(i=sn;i<=n;i++)
result.push_back(matrix[sm][i]);
if(++sm>m)
break;
for(i=sm;i<=m;i++)
result.push_back(matrix[i][n]);
if(--n<sn)
break;
for(i=n;i>=sn;i--)
result.push_back(matrix[m][i]);
if(--m<sm)
break;
for(i=m;i>=sm;i--)
result.push_back(matrix[i][sn]);
if(++sn>n)
break;
}
return result;
}
};
帶測試的代碼
#include<iostream>
using namespace std;
void printMatrix(int number[3][4],int rows,int cols)
{
int rowstart=0;
int rowend=rows-1;
int colstart=0;
int colend=cols-1;
while(rowstart<=rowend&&colstart<=colend)
{
int i;
for( i=colstart;i<=colend;i++)
{
cout<<number[rowstart][i]<<" ";
}
++rowstart;
if(rowstart>rowend)
break;
for( i=rowstart;i<=rowend;i++)
{
cout<<number[i][colend]<<" ";
}
--colend;
if(colend<colstart)
break;
for( i=colend;i>=colstart;i--)
{
cout<<number[rowend][i]<<" ";
}
--rowend;
if(rowend<rowstart)
break;
for( i=rowend;i>=rowstart;i--)
{
cout<<number[i][colstart]<<" ";
}
++colstart;
if(colstart>colend)
break;
}
}
int main()
{
int number[3][4]={1,2,3,4,10,11,12,5,9,8,7,6};
printMatrix(number,3,4);
}
上一篇 ionic和avos相結合
下一篇 編程高手解讀什么是NodeJs?