LeetCode498、对角线遍历
2023-02-18 16:39:24 时间
给你一个大小为 m * n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。
示例 1: 输入:mat = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,4,7,5,3,6,8,9]
示例 2: 输入:mat = [[1,2],[3,4]] 输出:[1,2,3,4]
提示: m == mat.length n == mat[i].length 1 <= m, n <= 104 1 <= m * n <= 104
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/diagonal-traverse 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
根据示例移动坐标值(y, x),找到调转方向的边界值,然后总结规律。 以一个4*3的矩阵示例(括号内代表x,y坐标值):4(x=3,y=0)
- 数组的大小等于m * n;
- 根据提议可以总结出遍历的坐标值列表为(xy): 00,10,01,02,11,20,30,21,12,22,31,32 加粗坐标为边界值,触发改变遍历方向
- 总结规律:
- 向右上方遍历到第一行,或者最右边一列的时候,调转方向;
- 如果不是最右边一列,就往右走一列;
- 如果是最右边,就往下走一列。
- 向左下方遍历到第一列,或者最下面一行的时候,调转方向;
- 如果不是最下面一行,往下走一步;
- 如果是最下面一行,就往右走一步。
- 向右上方遍历没有触发边界值时,x++,y–;
- 向左下方遍历没有触发边界值时,x–,y++;
- 向右上方遍历到第一行,或者最右边一列的时候,调转方向;
参考代码如下:
class Solution {
public int[] findDiagonalOrder(int[][] mat) {
int size = mat.length * mat[0].length;
int[] res = new int[size];
int x = 0;
int y = 0;
// 向右上方遍历
boolean toRightUp = true;
for (int i = 0; i < size; i++) {
// System.out.println(x + ", " + y);
res[i] = mat[y][x];
// 当向右上方遍历到第一行,或者最右边一列的时候,调转方向
if (toRightUp && (y == 0 || mat[0].length - 1 - x == 0)) {
toRightUp = false;
if (y == 0 && mat[0].length - 1 - x != 0) {
// 如果不是最右边一列,就往右走一列
x++;
continue;
} else {
// 如果是最右边,就往下走一列
y++;
continue;
}
} else if (!toRightUp && (x == 0 || mat.length - 1 - y == 0)) {
// 向左下方遍历到第一列,或者最下面一行的时候,调转方向
toRightUp = true;
if (x == 0 && mat.length - 1 - y != 0) {
// 如果不是最下面一行,往下走一步
y++;
continue;
} else {
// 如果是最下面一行,就往右走一步
x++;
continue;
}
} else {
if (toRightUp) {
// 向右上方遍历没有触发边界值时
x++;
y--;
} else {
// 向左下方遍历没有触发边界值时
x--;
y++;
}
}
}
return res;
}
}
相关文章
- 【架构师(第四十二篇)】 服务端开发之常用的登录鉴权方式
- 【架构师(第四十三篇)】 服务端开发之单元测试和接口测试
- 【架构师(第四十四篇)】 服务端开发之 pm2 和 nginx 介绍
- 【架构师(第四十六篇)】 服务端开发之安装 Docker
- 【架构师(第四十七篇)】 服务端开发之认识 Docker
- 【架构师(第四十八篇)】 服务端开发之 Dockerfile
- 【架构师(第四十九篇)】 服务端开发之认识 Docker-compose
- 【架构师(第五十篇)】 服务端开发之自动发布到测试机
- 【架构师(第五十一篇)】 服务端开发之技术方案设计
- 【架构师(第五十二篇)】 几个前端工具的基本使用
- 【架构师(第五十三篇)】 性能优化之 HTTP 缓存
- 【前端财富】前端工程师装机指南 (windows10)
- 最近很火的ChatGPT怎么玩?
- 小巧好用的免费虚拟机软件
- [ChatGPT解决方案]生成 nginx 自签名证书
- 完美解决文件格式转换问题
- MariaDB在Oscar故障演练平台的测试实践
- 压缩列表的源码实现
- Docker命令三板斧
- 一文教你快速注册OpenAi(ChatGPT),国内也可以!