【剑指offer】面试题20:顺时针打印矩阵
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
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.
思路:
这里没有使用书上的方法,而是维护一个二维坐标的最小最大值。假设横轴向左为x正方向,竖轴向下为y正方向,则依次从左到右、从上到下、从右到做、从下到上输出一个圈。能形成一个圈的条件是minx<maxx && miny<maxy。当此条件不满足时,分情况讨论打印出来即可。
写代码时需要注意的地方:
1.该坐标系下,x是列、y是行,所以取值时应该是matrix[y][x],而不是matrix[x][y];同理初始化maxx和maxy时,需要注意matrix[0].size()和matrix.size()
2.入口处参数判断。不要忘了这一点,其次,对于vector,不是判断它是不是等于NULL。。。同理返回值也不是返回NULL,而是空容器。
3.形成一个圈时,最后一个循环的判断条件,和前面三个稍微有些不同,注意下。
总结:
所以看到一个题之后,还是应该自己先想想,看自己想的话思路是怎样,然后再看答案。书上答案看得差不多懂了,还是感觉写起来有点麻烦,可能是因为不是自己的思路。自己的思路写出来也是对的,好像也挺简洁的。
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix) {
vector<int> res;
//if(matrix==NULL || matrix.size()<=0 || matrix[0].size()<=0) return NULL;
if(matrix.size()<= || matrix[].size()<=) return res;
int minx=,miny=;
int maxx=matrix[].size()-;
int maxy=matrix.size()-;
while(minx<maxx && miny<maxy)
{
for(int x=minx;x<=maxx;++x)
{
//res.push_back(x);
//res.push_back(miny);
//res.push_back(matrix[x][miny]); 晕死,所有的坐标都弄错了
res.push_back(matrix[miny][x]);
}
for(int y=miny+;y<=maxy;++y)
{
res.push_back(matrix[y][maxx]);
}
for(int x=maxx-;x>=minx;--x)
{
res.push_back(matrix[maxy][x]);
}
for(int y=maxy-;y>=miny+;--y)//条件是>=,不是<= 而且比较的数是miny+1,不是miny
{
res.push_back(matrix[y][minx]);
}
minx++;
maxx--;
miny++;
maxy--;
}
if(minx==maxx)
{
if(miny==maxy)
{
res.push_back(matrix[miny][minx]);
}
else
{
for(int y=miny;y<=maxy;++y)
{
res.push_back(matrix[y][minx]);
}
}
}
else if(miny==maxy)
{
for(int x=minx;x<=maxx;++x)
{
res.push_back(matrix[miny][x]);
}
}
return res;
}
};
【剑指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 顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出 ...
- 剑指Offer - 九度1391 - 顺时针打印矩阵
剑指Offer - 九度1391 - 顺时针打印矩阵2013-11-24 04:55 题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 ...
- 剑指offer十九之顺时针打印矩阵
一.题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...
- 剑指offer(19)顺时针打印矩阵
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...
- 【剑指Offer】19、顺时针打印矩阵
题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依 ...
- 牛客网剑指offer第19题——顺时针打印矩阵
这个题看似很简单: 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 ...
- 剑指offer面试题5 从头到尾打印链表(java)
注:(1)这里体现了java数据结构与C语言的不同之处 (2)栈的操作直接利用stack进行 package com.xsf.SordForOffer; import java.util.Stack; ...
- 剑指offer面试题5 从头到尾打印链表(c)
随机推荐
- Android实现Live Photos 加源代码
在Android手机上实现类似于iphone中的LivePhoto的功能 源代码分享 github:https://github.com/amazingyyc/DeepRed 代码说明: 1.改变视频 ...
- hdu 1561 The more, The Better_树状dp
题目链接 题意:给你一棵树,各个节点都有价值(除根节点),从根节点出发,选择m个节点,问最多的价值是多小. 思路:很明显是树状dp,遍历树时背包最优价值,dp[i][k]=max{dp[i][r]+d ...
- 第10讲- UI线程阻塞及其优化
第10讲UI线程阻塞及其优化 .UI 阻塞demo (首先在activity_main.xml中放置两个button,分别命名为button1,button2) //首先设置一个button1用来进行 ...
- spring MVC上传文件演示
//相比smartUpload功能上感觉确实有点心有意力不足的感觉,就安全性判断后缀,smartUpload就非常方便. public ModelAndView addFileUp(HttpServl ...
- java项目获取路径的几种方式
第一种: File f = new File(this.getClass().getResource("/").getPath()); System.out.println(f); ...
- 基于google earth engine 云计算平台的全国水体变化研究
第一个博客密码忘记了,今天才来开通第二个博客,时间已经过去两年了,三年的硕士生涯,真的是感慨良多,最有收获的一段时光,莫过于在实验室一个人敲着代码了,研三来得到中科院深圳先进院,在这里开始了新的研究生 ...
- 简单的Dao设计模式
简单的DAO设计模式 这两天学习到了DAO(Data Access Object 数据存取对象)设计模式.想谈谈自己的感受,刚开始接触是感觉有点难,觉得自己逻辑理不清,主要是以前学的知识比较零散没有很 ...
- 整合 新浪 腾讯 人人 qq空间 分享地址
function snsShare(snsId, title, content, image, url) { var snsUrl; // 新浪 腾讯 要申请appkey switch (snsId) ...
- What's New in C# 6.0(转)
原文地址:http://www.codeproject.com/Tips/1023426/Whats-New-in-Csharp 本来想翻译一下贴出来,但是好像很多语言组织起来比较困难,读书少不会表达 ...
- 控制点:ControlPoint
位于control:Points面板下,kitControl面板的ControlPallette中也存在控制点. 控制点是什么呢?一个数据值.一个传感器的值.比如,温度值,风速值,压力值,光照值,开关 ...