剑指offer--面试题20
题目:从外向里顺时针打印矩阵
做题心得:该题本质上并未考查复杂的数据结构及算法,而是考查了快速找规律的能力!!!
要想作出此题,必须先有绝对清晰的思路,否则越写越乱(因为涉及到很多的循环打印)
自己当时的思路基本符合作者提供的思路:
先考虑怎么打印一圈(四个循环),再考虑如何结束打印(和作者的意图不太一样,自己想通过打印数<=rows*columns来决定,作者的思路比较难想!)
但真正去写还是很困难。。。
参考代码如下:
#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 <= || 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)
{
int number = numbers[i][endX];
printNumber(number);
}
} // 从右到左打印一行
if(start < endX && start < endY)
{
for(int i = endX - ; i >= start; --i)
{
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);
}
剑指offer--面试题20的更多相关文章
- 剑指Offer:面试题20——顺时针打印矩阵(java实现)
题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数 字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1, ...
- 剑指 offer面试题20 顺时针打印矩阵
[题目描述] 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1, ...
- 剑指offer——面试题20:表示数值的字符串
#include"iostream" using namespace std; bool IsInt(const char **str); bool IsUnsignInt(con ...
- 剑指Offer——笔试题+知识点总结
剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...
- 【剑指Offer面试题】 九度OJ1510:替换空格
c/c++ 中的字符串以"\0"作为结尾符.这样每一个字符串都有一个额外字符的开销. 以下代码将造成内存越界. char str[10]; strcpy(str, "01 ...
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...
- 剑指offer面试题3 二维数组中的查找(c)
剑指offer面试题三:
- C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...
- C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
剑指offer 面试题23:从上往下打印二叉树 参与人数:4853 时间限制:1秒 空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...
- C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解
剑指offer 面试题39:判断平衡二叉树 提交网址: http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...
随机推荐
- WordPress 主题开发 - (八) Head模板 待翻译
THE WORDPRESS THEME HEADER TEMPLATE Now we get into the nitty-gritty: building up your header.php an ...
- struts2集成javamail发邮件(带附件)实践记录
一.代码预览 这两天在做struts2上的邮件发送.以前的项目有用到spring,用spring提供的邮件支持类很方便可以完成这个功能,但是现在只用struts2的话,就碰到了一系列的问题. 代码是从 ...
- ContactsContract中涉及数据库中的一些列属性值【Written By KillerLegend】
ContactsContract.Data http://developer.android.com/reference/android/provider/ContactsContract.Dat ...
- delphi 基础之三 文件流操作
文件流操作 Delphi操作流文件:什么是流?流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具.在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的, ...
- php网页,想弹出对话框, 消息框 简单代码
php网页,想弹出对话框, 消息框 简单代码 <?php echo "<script language=\"JavaScript\">alert(\&q ...
- WIndows7 多版本
Windows7 安装U盘 删除source\ei.cfg 以后开机安装会提示安装的版本
- 如何快速重置OUTLOOK2013,2016到初始配置状态,outlook 修改数据文件位置
适用范围: 安装OUTLOOK的机器 知识点分析: 快速清除当前OUTLOOK所有账户,回归到初始配置状态. 操作步骤: WIN+R调出运行 输入: C:\Program Files (x86)\Mi ...
- 使用spring dynamic modules的理由
spring的主要功能 spring框架提供了轻量级的容器和非侵入式的编程模型,这来自于其依赖注入.AOP和便携服务概念. osgi的主要功能 osgi服务平台提供了动态的应用程序执行环境,支持模块( ...
- swift 基于SDK8.0 获取当前时间
var date = NSDate.date() var timeFormatter = NSDateFormatter() timeFormatter.dateFormat = "MM-d ...
- Java Day 10
接口应用 多态 猫 x = new 猫(); 动物 x = new 猫(); 父类或接口的引用指向其子类的对象 class BookPC{ public static void main(Strin ...