您的位置:首页 > 职场人生

面试题20:顺时针打印矩阵

2016-07-06 16:09 363 查看
比较复杂,见P128解析

void PrintMatrixClockwisely(int** numbers, int columns, int rows)
{
if(numbers == NULL || columns <= 0 || rows <= 0)
return;

int start = 0;

while(columns > start * 2 && rows > start * 2)
{
PrintMatrixInCircle(numbers, columns, rows, start);

++start;
}
}

void PrintMatrixInCircle(int** numbers, int columns, int rows, int start)
{
int endX = columns - 1 - start;
int endY = rows - 1 - start;

// 从左到右打印一行
for(int i = start; i <= endX; ++i)
{
int number = numbers[start][i];
printNumber(number);
}

// 从上到下打印一列
if(start < endY)
{
for(int i = start + 1; i <= endY; ++i)
{
int number = numbers[i][endX];
printNumber(number);
}
}

// 从右到左打印一行
if(start < endX && start < endY)
{
for(int i = endX - 1; i >= start; --i)
{
int number = numbers[endY][i];
printNumber(number);
}
}

// 从下到上打印一行
if(start < endX && start < endY - 1)
{
for(int i = endY - 1; i >= start + 1; --i)
{
int number = numbers[i][start];
printNumber(number);
}
}
}


另一种方法:

http://blog.csdn.net/Irean_Lau/article/details/51072768

/*
20 :> 顺时针打印数组
*/
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int>res;
res.clear();
int row = matrix.size();//行数
int col = matrix[0].size();//列数

int circle = ((row < col ? row : col) - 1) / 2 + 1;//圈数

for (int i = 0; i < circle; i++)
{
//zuo->you
for (int j = i; j < col - i; ++j)
res.push_back(matrix[i][j]);
//shang->xia
for (int k = i + 1; k < row - i; ++k)
res.push_back(matrix[k][col - i - 1]);
//you->zuo
for (int l = col - i - 2; (l >= i) && (row - i - 1 != i); --l)
res.push_back(matrix[row - i - 1][l]);
//xia->shang
for (int m = row - i - 2; (m > i) && (col - i - 1 != i); --m)
res.push_back(matrix[m][i]);
}
return res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: