顺时针打印矩阵
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].
题目意思是要将矩阵顺时针打印出来
- 在剑指offer中也有类似试题
解题思路以下:
视察矩形 以下 看成1个圈 上行 右列 下行 左列
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
矩形rows 行数为3 cols列数为3 行跟列都有1个范围 行数的范围为0到2 列数的范围为 0到2
设 rowstart=0 rowend=2 colstart=0 colend=2 分别辨识行的起始、结束 和列的起始和结束
打印先从第1行开始 也就是 1 2 3 开始 此时
行不变 行动rowstart 列的变化为 colstart 到 colend 也就是 0到2 number[rowstart][i] i表示列 打印完以后 rowstart ++ 表示行数往下扩大
接着打印当前 最右侧列 6 9
此时列不变成 colend 行变化 为 rowstart 到 rowend 打印完后 colend– 表示列变小
接着打印当前最下边行 8 7
同上,此时 行不变 列出 colend 变到colstart 打印完后 rowend 减小 往上走
接着打印 4
4为第1圈的最后1个边界 此时列不变 行从rowend到 rowstart 打印完后 colstart++ 列变大 往右走
上面为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);
}
波比源码 » 顺时针打印矩阵
buy levaquin 250mg pills buy levofloxacin pills
avodart medication purchase tamsulosin sale order ondansetron for sale
buy spironolactone 100mg pill buy aldactone 100mg online cheap diflucan drug
order ampicillin 500mg pill ampicillin pill erythromycin for sale online
fildena order tamoxifen cost purchase methocarbamol without prescription
buy suhagra 100mg without prescription buy sildenafil 50mg for sale estradiol brand
lamictal generic purchase mebendazole generic retin gel drug
order tadalis online purchase avanafil generic buy voltaren 100mg pill
accutane pills buy zithromax 500mg pills order zithromax 250mg generic
cialis pill cialis 5 mg real viagra sites
order arimidex without prescription Low cost canadian viagra sildenafil 100mg sale
tadalafil 20mg kaufen tadalafil 5mg generika viagra kaufen
ramipril 10mg us ramipril 5mg price purchase azelastine online cheap
order hytrin 1mg pill arava 20mg us buy azulfidine 500 mg online
buy benicar 10mg for sale brand verapamil 240mg diamox 250mg over the counter
order isosorbide for sale buy telmisartan 80mg without prescription telmisartan cost
bupropion 150 mg cheap strattera 10mg oral order generic seroquel 50mg
salbutamol 100mcg ca levitra or viagra viagra sildenafil 50mg
tadalafil tablets order tadalafil for sale cheap symmetrel
naltrexone 50mg drug buy letrozole generic order aripiprazole for sale
purchase provera online cheap purchase microzide pills order cyproheptadine 4mg generic
fluvoxamine tablet order glipizide pill order glipizide 10mg
nootropil medication buy viagra 100mg pills real viagra sites
buy zithromax generic order prednisolone generic neurontin 100mg
order furosemide hydroxychloroquine drug purchase hydroxychloroquine pills
cialis brand generic anafranil 25mg anafranil 50mg brand
buy generic sporanox itraconazole brand tinidazole 300mg for sale
buy metformin 1000mg generic cialis 10mg cheap buy cialis 5mg online cheap
zyprexa online order purchase diovan for sale buy diovan for sale
buy norvasc 10mg online order sildenafil 100mg pill over the counter cialis
buy sildenafil 50mg online cheap lisinopril 10mg pill lisinopril 10mg for sale
prilosec without prescription online casino games online gambling casinos
help with essays real money games free welcome spins no deposit
research papers writing viagra 100mg order viagra 50mg pills
clomid for sale online ventolin generic red dog casino
order xenical online buy xenical 60mg without prescription zovirax 400mg generic
purchasing cialis on the internet female cialis pill order clopidogrel online cheap
allopurinol 100mg usa crestor for sale online order zetia 10mg online
order methotrexate online cheap order coumadin 2mg without prescription metoclopramide for sale online
order domperidone 10mg pill motilium over the counter cyclobenzaprine 15mg canada
oral flomax 0.2mg ondansetron 4mg us order aldactone 100mg online cheap
cialis from india order ampicillin 500mg buy ciprofloxacin 500mg generic
simvastatin over the counter buy valacyclovir 500mg proscar 5mg generic
flagyl 400mg over the counter buy augmentin 375mg sale purchase bactrim sale
purchase cephalexin for sale order cephalexin 250mg order erythromycin 500mg online cheap
buy tadalafil pills cialis 10mg usa buy viagra 100mg pill
viagra pills cost of cialis cialis tadalafil 5mg
cefuroxime 250mg sale methocarbamol cost methocarbamol price
casino online slots tadalafil tablets brand name cialis
research paper assistance research paper website where can i buy stromectol
online blackjack gambling live blackjack tadalafil 40mg us
oral zithromax 250mg neurontin 100mg tablet neurontin 800mg without prescription
furosemide 40mg canada cheap doxycycline 100mg plaquenil usa
brand fildena 50mg purchase rhinocort pill cheap budesonide
prednisone uk order prednisone generic order mebendazole 100mg generic