Ch4解决面试题的思路——20:顺时针打印矩阵
来源:互联网 发布:java thread 停止 编辑:程序博客网 时间:2024/05/17 00:56
【Ch4.2】画图让抽象问题形象化
【题目】
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
例如输入如下矩阵
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。
该问题看起来简单,实际解决这个问题,会在代码中包含多个循环,并且还需要判断多个边界条件。
因此解决这个问题的关键在于先要形成清晰的思路,并把复杂的问题分解成若干简单的问题。
【本题考点】
本题主要考查应聘者的思维能力。从外到内顺时针打印矩阵这个过程非常复杂,应聘者如何能很快地找出其规律并写出【完整】的代码,是解决这道题的关键。
当问题比较抽象不容易理解时,可以试着画几个图形帮助理解,这样往往能更快地找到思路。
【代码实现】
// PrintMatrix.cpp : Defines the entry point for the console application.//// 《剑指Offer——名企面试官精讲典型编程题》代码// 著作权所有者:何海涛#include "stdafx.h"void PrintMatrixInCircle(int** numbers, int columns, int rows, int start);void printNumber(int number);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); } }}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 < 1 || rows < 1) return; int** numbers = new int*[rows]; for(int i = 0; i < rows; ++i) { numbers[i] = new int[columns]; for(int j = 0; j < columns; ++j) { numbers[i][j] = i * columns + j + 1; } } PrintMatrixClockwisely(numbers, columns, rows); printf("\n"); for(int i = 0; i < rows; ++i) delete[] (int*)numbers[i]; delete[] numbers;}int _tmain(int argc, _TCHAR* argv[]){ /* 1 */ Test(1, 1); /* 1 2 3 4 */ Test(2, 2); /* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 */ Test(4, 4); /* 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(5, 5); /* 1 2 3 4 5 */ Test(1, 5); /* 1 2 3 4 5 6 7 8 9 10 */ Test(2, 5); /* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ Test(3, 5); /* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 */ Test(4, 5); /* 1 2 3 4 5 */ Test(5, 1); /* 1 2 3 4 5 6 7 8 9 10 */ Test(5, 2); /* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ Test(5, 3); /* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 */ Test(5, 4); return 0;}
0 0
- Ch4解决面试题的思路——20:顺时针打印矩阵
- 剑指offer——面试题20:顺时针打印矩阵
- 剑指offer 面试题20—顺时针打印矩阵
- 面试题20:顺时针打印矩阵 ***
- 面试题20 顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20顺时针打印矩阵
- 面试题20顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20顺时针打印矩阵
- 【面试题20】顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- My first blog in csdn.
- 苹果于WWDC 2014发布的编程语言Swift
- 黑马程序员_JAVA银行业务调度系统
- Android知识点之进程优先级
- JavaScript权威指南第07章 数组
- Ch4解决面试题的思路——20:顺时针打印矩阵
- 南海家具企业试水O2O电商模式 消费者线上下单 线下体验店取货
- 2014年功能升级进度
- SelectObject
- 网站技术架构二(大型网站架构模式)
- 要学会的
- csv和数据表的转换(一)
- 自建系统寻突破 线上线下创销售——惠州市“真维斯服饰(中国)有限公司”
- 线上购线下提 把客人吸回实体店