剑指Offer-20-顺时针打印矩阵
2015-11-14 12:13
344 查看
题目:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每个数字。
思路:
顺时针打印实际上是每次循环打印一圈矩阵的外层,然后圆圈不断向内缩小,每次打印的起始点实际为(i,i)i=0,1,2,…。
打印起始点的终止条件为
圆圈的打印规律为
1.从左向右打印
2.从上到下打印
3.从右到左打印
4.从下到上打印
每一步打印的前提条件:
1.总是需要,因为打印一圈至少有一步。
2.如果只有一行,那么不需要第二步,所以第二步的前提条件是终止行号大于起始行号。
3.第三步的前提条件是圈内至少有两行两列,即,除了第二步的前提条件以外,还有终止列号大于起始列号。
4.第四步的前提条件是圈内至少有3行两列,即,除了第三步的前提条件以外,还要终止行号大于起始行号+1
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每个数字。
比如 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印结果为 1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
思路:
顺时针打印实际上是每次循环打印一圈矩阵的外层,然后圆圈不断向内缩小,每次打印的起始点实际为(i,i)i=0,1,2,…。
打印起始点的终止条件为
2*i<rows && 2*i < cols
圆圈的打印规律为
1.从左向右打印
2.从上到下打印
3.从右到左打印
4.从下到上打印
每一步打印的前提条件:
1.总是需要,因为打印一圈至少有一步。
2.如果只有一行,那么不需要第二步,所以第二步的前提条件是终止行号大于起始行号。
3.第三步的前提条件是圈内至少有两行两列,即,除了第二步的前提条件以外,还有终止列号大于起始列号。
4.第四步的前提条件是圈内至少有3行两列,即,除了第三步的前提条件以外,还要终止行号大于起始行号+1
#include <iostream> using namespace std; void printMatrix(int** matrix, int rows, int cols) { if (rows <= 0 || cols <= 0) return; int start = 0; //判断打印起始点循环的终止条件 while (start * 2 < rows && start * 2 < cols) { //以(i,i)为起始点,打印一圈数值 print(matrix, rows, cols, start); start++; } } //以(start,start)为起点,顺时针打印一圈数值 void print(int** matrix, int rows, int cols, int start) { //终止列号 int endX = cols - start - 1; //终止行号 int endY = rows - start - 1; //从左到右打印一行 for (int i = start; i <= endX; i++) cout << matrix[start][i] << " "; //从上到下打印一列 if (endY > start) { for (int i = start + 1; i <= endY; i++) cout << matrix[i][endX] << " "; } //从右到左打印一行 if (endY > start && endX > start) { for (int i = endX - 1; i >= start; i--) cout << matrix[endY][i] << ""; } //从下到上打印一列 if (endY - 1 > start && endX > start) { for (int i = endY - 1; i >= start + 1; i--) cout << matrix[i][start] << " "; } }
相关文章推荐
- 剑指offer学习--二维数组中的查找
- 函数
- 【学习笔记】复习html
- html5基础知识第三章表单
- HTML4/4.01,XHTML 1.0/1.1/2.0,HTML5,之间有什么区别?
- No1 HTML5+CSS
- HTML textarea 文本区域 外面说明文字垂直居中对齐的问题
- Webpack基本用法
- 提交 form表单js转成json
- 剑指Offer-19-二叉树的镜像
- Json 基于jQuery+JSON的省市联动效果
- 剑指Offer-18-树的子结构
- JavascriptDOM编程艺术学习笔记4
- 【JavaScript】DOM基础总结
- 网页实时聊天之js和jQuery实现ajax长轮询
- WPF ToolKit Chart 自定义样式
- javascript对word文档进行页眉页脚套打
- Populating Next Right Pointers in Each Node
- nyoj 248 BUYING FEED 【贪心】
- CSS——常用