LintCode #46. Matrix Zigzag Traversal (Easy)
class Solution {
public:
vector<int> printZMatrix(vector<vector<int> > &matrix) {
vector<int> v;
if (matrix.size() == 0) return v;
int m = matrix.size(), n = matrix[0].size(), cnt = m * n;
int i = 0, j = 0;
int d[][2] = {{ -1, 1 }, { 1, -1 }};
int dir = 0;
while (v.size() < cnt) {
while (i >= 0 && i < m && j >= 0 && j < n) {
v.push_back(matrix[i][j]);
i += d[dir][0];
j += d[dir][1];
}
i -= d[dir][0];
j -= d[dir][1];
if (dir == 0) {
if (j + 1 < n) ++j;
else ++i;
} else {
if (i + 1 < m) ++i;
else ++j;
}
dir = (dir + 1) % 2;
}
return v;
}
};
思路:
- 斜着走的方向只有"右上"(
dir=0
)和"左下"(dir=1
). 按"右上", "左下"的顺序交替走. - 当走到边界的时候, 要么"向右走一步", 要么"向下走一步".
- 如果正在向"右上"走, 优先"向右走一步", 若不能则"向下走一步".
- 如果正在向"左下"走, 优先"向下走一步", 若不能则"向右走一步".
时间复杂度: O(m*n)
空间复杂度: O(1)
参照这篇博文的思路.
class Solution {
public:
/**
* @param matrix: a matrix of integers
* @return: a vector of integers
*/
vector<int> printZMatrix(vector<vector<int> > &matrix) {
vector<int> v;
if (matrix.size() == 0) return v;
int m = matrix.size(), n = matrix[0].size();
int sum = 0, x = 0, dx = -1;
while (sum < m + n - 1) {
while (x >= 0 && x < m && sum - x >= 0 && sum - x < n) {
v.push_back(matrix[x][sum - x]);
x += dx;
}
x -= dx;
sum++;
if ((dx == -1 && sum - x >= n)
|| (dx == 1 && x < m - 1)) {
++x;
}
dx = -dx;
}
return v;
}
};
思路:
- 观察下标规律.
(0, 0)
(0, 1), (1, 0)
(2, 0), (1, 1), (0, 2)
(0, 3), (1, 2), (2, 1)
(2, 2), (1, 3)
(2, 3)
可以看到各行x
与y
坐标的和是常数, 且该和逐行递增.
- 偶数行
x
递减, 奇数行x
递增. - 原解法有个缺陷是"矩阵越细长, 空循环就越多". 我的解法对这点进行了优化.
时间复杂度:O(m*n)
空间复杂度:O(1)
[OJ] Matrix Zigzag Traversal的更多相关文章
-
Matrix Zigzag Traversal(LintCode)
Matrix Zigzag Traversal Given a matrix of m x n elements (m rows, ncolumns), return all elements of ...
-
Lintcode: Matrix Zigzag Traversal
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in ZigZag-or ...
-
lintcode:Matrix Zigzag Traversal 矩阵的之字型遍历
题目: 矩阵的之字型遍历 给你一个包含 m x n 个元素的矩阵 (m 行, n 列), 求该矩阵的之字型遍历. 样例 对于如下矩阵: [ [1, 2, 3, 4], [5, 6, 7, 8], [9 ...
-
LeetCode OJ:ZigZag Conversion(字符串的Z字型转换)
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...
-
[LintCode]——目录
Yet Another Source Code for LintCode Current Status : 232AC / 289ALL in Language C++, Up to date (20 ...
-
Java Algorithm Problems
Java Algorithm Problems 程序员的一天 从开始这个Github已经有将近两年时间, 很高兴这个repo可以帮到有需要的人. 我一直认为, 知识本身是无价的, 因此每逢闲暇, 我就 ...
-
别再埋头刷LeetCode之:北美算法面试的题目分类,按类型和规律刷题,事半功倍
算法面试过程中,题目类型多,数量大.大家都不可避免的会在LeetCode上进行训练.但问题是,题目杂,而且已经超过1300道题. 全部刷完且掌握,不是一件容易的事情.那我们应该怎么办呢?找规律,总结才 ...
-
PAT甲级1127. ZigZagging on a Tree
PAT甲级1127. ZigZagging on a Tree 题意: 假设二叉树中的所有键都是不同的正整数.一个唯一的二叉树可以通过给定的一对后序和顺序遍历序列来确定.这是一个简单的标准程序,可以按 ...
-
LeetCode OJ:Binary Tree Zigzag Level Order Traversal(折叠二叉树遍历)
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
随机推荐
-
Codeforces Round #383 (Div. 1)
A: 题目大意:给出一个有向图(n<=100),每个点的出度都为1,求最小的t,使得任意两点x,y,如果x走t步后能到y,那么y走t步后到x. 题解: 首先每个点应该都在一个环上,否则无解. 对 ...
-
shell命令date
某个标准时间转换为unix时间戳 date -d '2015-10-20 15:07:02' +%s unix时间戳转换为对应的标准时间 date -d @1445324822 date " ...
-
如何在服务器上搭建git服务器
参考文章: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770 ...
-
C++封装SQLite实例&;lt;三&;gt;
前一篇博客中介绍的是怎样依据sqlite3_get_table()函数来获取一张表的内容,就是一股脑的把表中的内容所有存储起来放在一个一维数组中,这其中的规则已经介绍过了.接下来讲的是怎样依据一个SQ ...
-
官方解答:Vultr VPS常见问题
VULTR VPS配置高,价格低廉,是非常优秀的vps品牌.今天我来翻译vultr官方FAQ,相信你能找到具体答案. Q 请介绍VULTR VPS机器硬件配置 Intel CPU 3+ GHz Cor ...
-
ef core的外键约束笔记
ef core设置可选外键,有如下几种方式:1.在依赖实体AAA中,并不显式设置外键属性XXXId 2.手动设置外键属性XXXId为可空类型(int?等类型) 3.在实体类与数据表进行映射时,配置狭隘 ...
-
[antd-design-pro] mock 数据(post,request不一致)Sorry, we need js to run correctly!
Sorry, we need js to run correctly! 可能问题: mock数据 api 和 request api 不一致 'POST /api/banners/left' ...
-
NumPy 副本和视图
NumPy 副本和视图 副本是一个数据的完整的拷贝,如果我们对副本进行修改,它不会影响到原始数据,物理内存不在同一位置. 视图是数据的一个别称或引用,通过该别称或引用亦便可访问.操作原有数据,但原有数 ...
-
[ntp]查看ntp服务器的连接情况
转自:http://www.cnblogs.com/liuyou/archive/2012/07/29/2614338.html 命令和工具 # watch ntpq -p # ntpq -p, /e ...
-
C后端设计开发 - 第4章-武技-常见*下三路
正文 第4章-武技-常见*下三路 后记 如果有错误, 欢迎指正. 有好的补充, 和疑问欢迎交流, 一块提高. 在此谢谢大家了. Moonlight Shadow 纪念那个我爱的, 被我感动的女孩 ...