9. <tag-数组模拟矩阵>-lt.498-对角线遍历 + lt.1424-对角线遍历 II 1.2
lt.498-对角线遍历
[案例需求]
[思路分析]
- 详细题解
[代码实现]
class Solution {
public int[] findDiagonalOrder(int[][] mat) {
// 每个矩阵对角线遍历次数为 count = m + n - 1;]
//在这些遍历中, 先向上遍历, 再向下遍历;
//注意, 每次遍历到边缘部位, 如果要回到下一个方向遍历的第一个元素, 还要对行数,和列数做出处理
int rowLen = mat.length;
int colLen = mat[0].length;
//结果矩阵 和 这个矩阵的索引 resindex
int[] res = new int[rowLen * colLen];
int resIndex = 0;
//遍历次数
int count = rowLen + colLen - 1;
int col = 0;
int row = 0;
for(int i = 0; i < count; i++){
//向上遍历, 也就是count为偶数的时候, 向上遍历
if(i % 2 ==0){
//边界处理很重要
//下面的while循环是完整的一次向上遍历过程
while(row >= 0 && col < colLen){
res[resIndex++] = mat[row][col];
row--;
col++;
}
//边界处理(向上-->向下遍历转换, 需要做边界处理)要分为两种
//一种是向上遍历时, 遍历完一个数值后, 行-1, 列 + 1, 此时还未到达矩阵的最后一列(col < colLen)
//当向上遍历取到了最后一列上的值的时候, 行 + 2, 列 - 1
if(col < colLen){
row++;
}else{
row += 2;
col--;
}
}else{
//下面的while循环是一次向下遍历的过程
while(col >= 0 && row < rowLen){
res[resIndex++] = mat[row][col];
row++;
col--;
}
//向下-->向上遍历的转换
if(row < rowLen){
col++;
}else{
row --;
col += 2;
}
}
}
return res;
}
}
面试扩展: 要求你只使用斜向上45°遍历, 如何实现?
- 把上面的向上和向下遍历删掉一种情况, 然后每趟遍历前记录本次遍历的初始位置,
- 遍历完这趟之后, 把行和列直接置为这一趟初始位置的下一行, 或者是这一趟初始位置的下一列即可!
- 如下图, 笔者画的线表示了每一趟遍历初始位置的变化情况;
class Solution {
public int[] findDiagonalOrder(int[][] mat) {
int rowLen = mat.length;
int colLen = mat[0].length;
int[] res = new int[rowLen * colLen];
int index = 0;
int count = rowLen + colLen - 1;
//行数, 列数
int row = 0;
int col = 0;
for(int i = 0; i < count; i++){
//向上遍历
//if(i % 2 == 0){
//记录初始位置的row和col
int cur_row = row;
int cur_col = col;
while(row >= 0 && col < colLen && row < rowLen){
res[index++] = mat[row][col];
--row;
++col;
}
// 判断
if(cur_row < rowLen - 1){
row = cur_row + 1;
col = cur_col;
}else{
row = rowLen - 1;
col = cur_col + 1;
}
}
return res;
}
}
lt.1424-对角线遍历 II
[案例需求]
[思路分析]
[代码示例]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)