力扣:498. 对角线遍历

本文档介绍了如何通过Java实现一个解决方案类,解决将二维矩阵按对角线顺序排列的问题。通过`findDiagonalOrder`方法,处理不同大小的矩阵并返回按顺序的数组。核心是巧妙地利用奇偶数判断行和列的遍历方向。
摘要由CSDN通过智能技术生成


import java.util.Arrays;

/**
 * @author xnl
 * @Description:
 * @date: 2022/6/14   21:09
 */
public class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        // int[][] mat = {{1,2,3},{4,5,6},{7,8,9}};
        // int[][] mat = {{2, 3}};
        int[][] mat = {{3}, {2}};
        System.out.println(Arrays.toString(solution.findDiagonalOrder(mat)));
    }

    /**
     * @param mat
     * @return
     */
    public int[] findDiagonalOrder(int[][] mat) {
        if (mat.length == 1){
            return mat[0];
        }
        int m = mat.length;
        int n = mat[0].length;
        // 一共有的边
        int edge = m + n - 1;
        int[] ans = new int[m * n];
        int index = 0;

        for (int i = 0; i < edge; i++){
            // 奇数代表从上到下,偶数代表从下到上
            if (i % 2 == 1){
                int x = i < n ? 0 : i - n + 1;
                int y = i < n ? i : n - 1;
                while (x < m && y >= 0){
                    ans[index] = mat[x][y];
                    index++;
                    x++;
                    y--;
                }
            } else {
                int x = i < m ? i : m - 1;
                int y = i < m ? 0 : i - m + 1;
                while (x >= 0 && y < n){
                    ans[index] = mat[x][y];
                    index++;
                    x--;
                    y++;
                }
            }
        }
        return ans;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值