顺时针打印矩阵
来源:互联网 发布:淘宝店刷销量方法 编辑:程序博客网 时间:2024/05/22 01:30
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
方法:
- 每次打印一个圈,选取左上角(start,start)作为起始。循环继续的条件是columns>startX * 2且rows>startY * 2.
- 把打印一圈分为4步:第一步从左到右打印一行,第二步从上到下打印一列,第三步从右到左打印一行,第四步从下到上打印一列。最后一圈有可能退化成只有一行,只有一列,甚至只有一个数字。由于第一步总是需要的,需要第二步的前提条件是终止行号大于起始行号,第三步打印前提是终止列号大于起始列号,第四部同理。
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); } }}
测试用例:数组有多行多列,只有一行,只有一列,只有一个元素
0 0
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 矩阵顺时针打印
- 顺时针打印矩阵
- 顺时针打印矩阵[算法]
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 什么是堆和栈,它们在哪儿?
- Spring中配置和读取多个Properties文件
- SpringMVC与Struts2区别
- Ubuntu下Postgresql卸载出错的解决办法
- STM32学习笔记-Flash做为存储器储存数据
- 顺时针打印矩阵
- 检查你的Xcode 版本是否有效
- tableview——设置cell的文字居中和透明度
- 使用java实现http多线程下载
- Android keystore 密码找回
- 自己写的shall函数集合
- 软件开发中的经验教训
- Android中spinner的简单用法(1)
- 混淆器ProGuard