498. Diagonal Traverse对角线z型traverse
[抄题]:
Given a matrix of M x N elements (M rows, N columns), return all elements of the matrix in diagonal order as shown in the below image.
Example:
Input:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
Output: [1,2,4,7,5,3,6,8,9]
Explanation:

[暴力解法]:
时间分析:
空间分析:
[优化后]:
时间分析:
空间分析:
[奇葩输出条件]:
[奇葩corner case]:
[思维问题]:
不知道怎么控制方向:由于每次只走一格,所以用xy+-d即可,d=1
[英文数据结构或算法,为什么不用别的数据结构或算法]:
[一句话思路]:
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:
[一刷]:
- 为了保证第一个数一样,都是先直接添加后再处理
result[i] = matrix[row][col];
            row -= d;
            col += d;
[二刷]:
- 为了避免处理>边界时顺便把<边界处理了,<边界的小情况要写在后面
[三刷]:
[四刷]:
[五刷]:
[五分钟肉眼debug的结果]:
[总结]:
换方向用d = -d来控制
[复杂度]:Time complexity: O(n) Space complexity: O(n)
[算法思想:迭代/递归/分治/贪心]:
[关键模板化代码]:
[其他解法]:
[Follow Up]:
[LC给出的题目变变变]:
[代码风格] :
[是否头一次写此类driver funcion的代码] :
[潜台词] :
public class Solution {
    public int[] findDiagonalOrder(int[][] matrix) {
        if (matrix == null || matrix.length == 0) return new int[0];
        int m = matrix.length, n = matrix[0].length;
        int[] result = new int[m * n];
        int row = 0, col = 0, d = 1;
        //for loop: add to result, expand, handle corner cases
        for (int i = 0; i < m * n; i++) {
            result[i] = matrix[row][col];
            row -= d;
            col += d;
            if (row >= m) {row = m - 1; col += 2; d = -d;}
            if (col >= n) {col = n - 1; row += 2; d = -d;}
            if (row < 0) {row = 0; d = -d;}
            if (col < 0) {col = 0; d = -d;}
        }
        return result;
    }
}
498. Diagonal Traverse对角线z型traverse的更多相关文章
- 【LeetCode】498. Diagonal Traverse 解题报告(Python)
		[LeetCode]498. Diagonal Traverse 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: htt ... 
- 498 Diagonal Traverse 对角线遍历
		详见:https://leetcode.com/problems/diagonal-traverse/description/ C++: class Solution { public: vector ... 
- [LeetCode] Diagonal Traverse 对角线遍历
		Given a matrix of M x N elements (M rows, N columns), return all elements of the matrix in diagonal ... 
- LeetCode - 498. Diagonal Traverse
		Given a matrix of M x N elements (M rows, N columns), return all elements of the matrix in diagonal ... 
- 498. Diagonal Traverse
		题目思路 题目来源 C++实现 class Solution { public: vector<int> findDiagonalOrder(vector<vector<int ... 
- CCF真题Z型输出
		#include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> ... 
- 字符串的z型转换
		class Solution(object): def convert(self, s, numRows): if numRows==1: return ... 
- 算法:Z字型(Zigzag)编排
		问题:给定 n 行和 m 列的二维数组矩阵.如图所示,以 ZIG-ZAG 方式打印此矩阵. 从对称的角度来看,通过反复施加滑行反射可以从简单的图案如线段产生规则的之字形. 主要思想:算法从(0, 0) ... 
- matplotlib柱状图、面积图、直方图、散点图、极坐标图、箱型图
		一.柱状图 1.通过obj.plot() 柱状图用bar表示,可通过obj.plot(kind='bar')或者obj.plot.bar()生成:在柱状图中添加参数stacked=True,会形成堆叠 ... 
随机推荐
- PythonStudy——文件操作习题  Document operation exercises
			# 1.统计文件数据中字母e出现的次数(不区分大小写)# 文件内容:hello friend, can you speak English!# 结果:4# 分析:将文件内容读出,然后统计读出的字符串中 ... 
- 配置SSH使用秘钥登录
			使用密码远程登录ssh还是有比较大的风险的,比较安全的方法是使用秘钥登录 配置步骤如下 首先生成秘钥 ssh-keygen (直接默认回车也可以,生成的秘钥和公钥默认防止在/root/.ssh/文件 ... 
- Python tkinter模块和参数
			转自:https://www.cnblogs.com/aland-1415/p/6849193.html 1.使用tkinter.Tk() 生成主窗口(root=tkinter.Tk()):root. ... 
- DokuWiki 命名空间管理
			为了更好的组织结构,Dokuwiki提供了命名空间这个功能,那怎么管理命名空间的,其实可以安装插件去管理 Add New Page Plugin:新建界面 https://www.dokuwiki.o ... 
- Bootstrap 插件收集
			Bootstrap-Mutilselect 将下拉选项扩展支持多选以及多种选择方式 http://davidstutz.de/bootstrap-multiselect/ Bootstrap Sel ... 
- KPPW2.5 漏洞利用--CSRF
			kppw2.5 CSRF漏洞复现 漏洞说明 http://192.168.50.157/kppw25/index.php?do=user&view=message&op=send 收件 ... 
- Letsencrypt SSL免费证书申请(Docker)
			最近需要SSL证书,又不想花钱买,正好看到linux基金会去年底上线了新的开源项目,免费推广SSL遂尝试. Let's Encrypt 介绍 Let’s Encrypt is a free, auto ... 
- 红外NEC协议
			注意: 用示波器在接收头抓的电平看起来和NEC协议刚好相反, 那是因为:HS0038B 这个红外一体化接收头,当收到有载波的信号的时候,会输出一个低电平,空闲的时候会输出高电平. 具体情况,具体分析. ... 
- 如何查看安装python和numpy的版本
			命令行下查看python和numpy的版本和安装位置 1.查看python版本 方法一: python -V 注意:‘-V‘中‘V’为大写字母,只有一个‘-’ 方法二: python --versio ... 
- 一个简单的gridlayout栗子
			<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
