《剑指offer》第二十九题(顺时针打印矩阵)
- // 面试题29:顺时针打印矩阵
- // 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
- #include <iostream>
- void PrintMatrixInCircle(int** numbers, int columns, int rows, int start);
- void printNumber(int number);
- void PrintMatrixClockwisely(int** numbers, int columns, int rows)
- {
- if (numbers == nullptr || columns <= || rows <= )//鲁棒性
- return;
- int start = ;
- while (columns > start * && rows > start * )//结束循环条件
- {
- PrintMatrixInCircle(numbers, columns, rows, start);
- ++start;
- }
- }
- void PrintMatrixInCircle(int** numbers, int columns, int rows, int start)
- {
- int endX = columns - - start;
- int endY = rows - - start;
- // 从左到右打印一行
- for (int i = start; i <= endX; ++i)
- {
- int number = numbers[start][i];
- printNumber(number);
- }
- // 从上到下打印一列
- if (start < endY)//如果这列(这列第一个点被上面那个打印过了)有一个以上个点
- {
- for (int i = start + ; i <= endY; ++i)//所以这里start + 1
- {
- int number = numbers[i][endX];
- printNumber(number);
- }
- }
- // 从右到左打印一行
- if (start < endX && start < endY)//在有上述那一列情况下,还有从左到右的点
- {
- for (int i = endX - ; i >= start; --i)//由于最右的点让上述那列打印了,于是开头是endX - 1
- {
- int number = numbers[endY][i];
- printNumber(number);
- }
- }
- // 从下到上打印一行
- if (start < endX && start < endY - )//第一项保证这列不是从上到下那列,第二保证还有除了一三情况下的节点可以打印
- {
- for (int i = endY - ; i >= start + ; --i)//都得注意打印条件和起始终止位置啊
- {
- int number = numbers[i][start];
- printNumber(number);
- }
- }
- }
- void printNumber(int number)
- {
- printf("%d\t", number);
- }
- // ====================测试代码====================
- void Test(int columns, int rows)
- {
- printf("Test Begin: %d columns, %d rows.\n", columns, rows);
- if (columns < || rows < )
- return;
- int** numbers = new int*[rows];//建立一个二维矩阵第一步
- for (int i = ; i < rows; ++i)
- {
- numbers[i] = new int[columns];//建立一个二维矩阵第二步
- for (int j = ; j < columns; ++j)
- {
- numbers[i][j] = i * columns + j + ;
- }
- }
- PrintMatrixClockwisely(numbers, columns, rows);
- printf("\n");
- for (int i = ; i < rows; ++i)
- delete[](int*)numbers[i];//还得循环删除
- delete[] numbers;//然后还得删除!
- }
- int main(int argc, char* argv[])
- {
- /*
- 1
- */
- Test(, );
- /*
- 1 2
- 3 4
- */
- Test(, );
- /*
- 1 2 3 4
- 5 6 7 8
- 9 10 11 12
- 13 14 15 16
- */
- Test(, );
- /*
- 1 2 3 4 5
- 6 7 8 9 10
- 11 12 13 14 15
- 16 17 18 19 20
- 21 22 23 24 25
- */
- Test(, );
- /*
- 1
- 2
- 3
- 4
- 5
- */
- Test(, );
- /*
- 1 2
- 3 4
- 5 6
- 7 8
- 9 10
- */
- Test(, );
- /*
- 1 2 3
- 4 5 6
- 7 8 9
- 10 11 12
- 13 14 15
- */
- Test(, );
- /*
- 1 2 3 4
- 5 6 7 8
- 9 10 11 12
- 13 14 15 16
- 17 18 19 20
- */
- Test(, );
- /*
- 1 2 3 4 5
- */
- Test(, );
- /*
- 1 2 3 4 5
- 6 7 8 9 10
- */
- Test(, );
- /*
- 1 2 3 4 5
- 6 7 8 9 10
- 11 12 13 14 15
- */
- Test(, );
- /*
- 1 2 3 4 5
- 6 7 8 9 10
- 11 12 13 14 15
- 16 17 18 19 20
- */
- Test(, );
- system("pause");
- return ;
- }
《剑指offer》第二十九题(顺时针打印矩阵)的更多相关文章
- 剑指Offer(十九)——顺时针打印矩阵
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 ...
- 【剑指offer】面试题 29. 顺时针打印矩阵
面试题 29. 顺时针打印矩阵 题目描述 题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- 《剑指offer》面试题20 顺时针打印矩阵 Java版
我的方法:遇到这种题最好在纸上画一画打印路线.我利用了4个标志left.top.right.bottom,表示当前需要打印的左界.上届.右界和下界,换句话说这些界线之外的已经打印了,如此一来判断结束的 ...
- 剑指offer——面试题29:顺时针打印矩阵
#include"iostream" #include"stdio.h" using namespace std; void PrintMatrixInCirc ...
- 《剑指offer》面试题29. 顺时针打印矩阵
问题描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4 ...
- 剑指Offer(十九):顺时针打印矩阵
剑指Offer(十九):顺时针打印矩阵 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/baid ...
- 剑指offer十九之顺时针打印矩阵
一.题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...
- 剑指Offer(书):顺时针打印数组
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1 ...
- 剑指offer五十九之按之字形顺序打印二叉树
一.题目 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推.二.思路 详见代码 三.代码 import j ...
- 剑指offer四十九之把字符串转换成整数
一.题目 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一个合法的数值则返回0 二.思路 详见代码. 三.代码 public class Solution { ...
随机推荐
- 网站nginx负载下因程序错误导致多节点重复处理请求的解决过程
目录 前言 问题来了 问题又来了 问题分析 困惑 转机 后续 前言: 这是我上周工作过程中的一次解决问题的过程.解决的是nginx负载环境下,因为应用程序异常导致某一请求被多节点站点重复处理的问题. ...
- mysql主从延迟(摘自http://www.linuxidc.com/Linux/2012-02/53995.htm)
http://www.linuxidc.com/Linux/2012-02/53995.htm
- tfs代码上传到server并下载到新位置
1.svn与git代码管理原理基本一致,基于文档管理,能看到文件代码,通过设置文件的只读属性来控制代码. 而tfs是基于sqlserver及lock来管理,看不见代码文件 2.tfs没有自己的用户管理 ...
- C++中的访问权限
C++中类的成员的权限: private:只能由该类的成员函数,友元函数访问,不能被该类的对象访问. protected:除了private外还能被子类的函数访问,同样不能被该类的对象访问. publ ...
- keras load model 遇到 自定义函数 Lambda(lambda x: softmax(x, axis=1), NameError: global name 'softmax' is not defined
问题 在定义模型的时候,自定义了一个函数 模型保存之后,load 模型的时候报错: 解决 load 模型的时候需要指定custom object 参考: https://faroit.github.i ...
- html5新元素练习(1)
1, <nav> 是专门由于菜单导航,链接导航的元素 2, <header> 主体页面的头部,与head不同,它的内容可以显示出来 3, <footer>页面 ...
- UVALive - 7269 I - Snake Carpet
思路: 多画画就发现从五的时候可以这么填: 六的时候这么填: 七的时候这么填: 看出规律了吗? 没看出的话再画画把. #include <bits/stdc++.h> using name ...
- Linux基础命令---tune2fs
tune2fs tune2fs允许系统管理员在Linux ext2.ext3或ext4文件系统上调整各种可调的文件系统参数.这些选项的当前值可以使用-l选项显示,也可以通过使用dumpe2fs (8) ...
- 使用echo命令清空tomcat日志文件
使用echo命令清空日志文件echo -n "" > /server/tomcat/logs/catalina.out ==>要加上"-n"参数,默 ...
- 让nodepad++编辑时链接能双击打开
让nodepad++编辑时链接能双击打开,Notepad++自动把代码或编辑状态里的链接或URL地址转成可点击的链接,当你双击该URL会打开相应的网页地址,不用复制地址到浏览器打开了,非常方便好用. ...