概述
(本博客旨在个人总结回顾)
题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如 :如果输入如下矩阵:
解题思路:
问题明显需要需要和判断临界条件来输出结果。
所以需要清晰打印思路:一层一层打印,先打印出第一层,再打印出第二层,依次打印完。
完整代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
/*
* @name PrintMatrixRect
* @brief 顺时针打印矩阵某一层(从外到里)
* @param [in] int** pMatrix 二维数组(矩阵)
* @param [in] int nColumns 行数
* @param [in] int nRows 列数
* @param [in] int nIndex (第几层,从0开始,0为最外层)
* @return void
*/
void PrintMatrixRect(int** pMatrix, int nColumns, int nRows, int nIndex)
{
if (NULL == pMatrix || nColumns <= 0 || nRows <= 0)
{
return;
}
//输出上行
int rowTop = nIndex;
int column = nIndex;
for (; column < nColumns - nIndex; column++)
{
cout << pMatrix[rowTop][column] << " ";
}
//输出右列
int row = nIndex + 1;
int columnRight = nColumns - 1 - nIndex;
for (; row < nRows - nIndex; row++)
{
cout << pMatrix[row][columnRight] << " ";
}
//输出下行
int rowBottom = nRows - 1 - nIndex;
if (rowBottom != rowTop)
{
column = nColumns - nIndex - 2;
for (; column > nIndex; column--)
{
cout << pMatrix[rowBottom][column] << " ";
}
}
//输出左列
int columnLeft = nIndex;
if (columnLeft != columnRight)
{
row = nRows - 1 - nIndex;
for (; row > nIndex; row--)
{
cout << pMatrix[row][column] << " ";
}
}
}
/*
* @name PrintMatrixClockwisely
* @brief 顺时针从外往里打印矩阵
* @param [in] int * * pMatrix 二维数组指针(矩阵)
* @param [in] int nColumns 列数
* @param [in] int nRows 行数
* @return void
*/
void PrintMatrixClockwisely(int** pMatrix, int nColumns, int nRows)
{
if (NULL == pMatrix || nColumns <= 0 || nRows <= 0)
{
return;
}
int nIndex = 0;
while (nIndex <= nColumns / 2 && nIndex <= nRows / 2)
{
PrintMatrixRect(pMatrix, nColumns, nRows, nIndex);
nIndex++;
}
cout << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
//测试例子:多行多列
int arr1[4][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
int *array1[4];//指针数组
for (int i = 0; i < 4; i++)
{
array1[i] = arr1[i];
}
PrintMatrixClockwisely(array1, 4, 4);
//测试例子:一行多列
int arr2[1][4] = {
{ 1, 2, 3, 4 }
};
int *array2[1];
for (int i = 0; i < 1; i++)
{
array2[i] = arr2[i];
}
PrintMatrixClockwisely(array2, 4, 1);
//测试例子:多行一列
int arr3[4][1] = {
{ 1},
{ 5},
{ 9},
{ 13}
};
int *array3[4];//指针数组
for (int i = 0; i < 4; i++)
{
array3[i] = arr3[i];
}
PrintMatrixClockwisely(array3, 1, 4);
//测试例子:一行一列
int arr4[1][1] = {
{ 1 }
};
int *array4[1];
for (int i = 0; i < 1; i++)
{
array4[i] = arr4[i];
}
PrintMatrixClockwisely(array4, 1, 1);
PrintMatrixClockwisely(NULL, 1, 1);
system("pause");
return 0;
}
运行结果:
最后
以上就是自觉小懒猪为你收集整理的剑指Offer第20题(顺时针打印矩阵)的全部内容,希望文章能够帮你解决剑指Offer第20题(顺时针打印矩阵)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复