矩阵的对角线遍历

本文介绍了如何使用C++编写一个函数,解决LeetCode中的数组对角线遍历问题,通过两个嵌套循环和条件判断实现从右上到左下和从左下到右上的对角线顺序存储。
class Solution {
public:
     vector<int> findDiagonalOrder(vector<vector<int>>& mat) {
         int m=mat.size();
         int n=mat[0].size();
         vector<int> ans(m*n);
         //对角巷方向次数
         int count=n+m-1;
         int col=0,row=0,index=0;
         for (int i = 0; i < count; i++) {
             //判断对角线方向(因题目初始从右上(即i=0)开始):偶数右上,奇数左下
             if (i % 2 == 0) {
                 //右上操作
                 while (row >= 0 && col < n) {
                     //将矩阵数存入存放数组
                     ans[index] = mat[row][col];
                     //索引后移
                     index++;
                     //右上规律:行减一,列加一
                     row--;
                     col++;
                 }
                 //判断是否为越界情况:不越界正常行加一,越界行加二,列减一;
                 //(此处不理解的拿张草稿纸将循环中row和col的值遍历写一下对照矩阵图就明白了)
                 if (col < n) {
                     row++;
                 }
                 else {
                     row += 2;
                     col--;
                 }
             }
                 //左下操作:按规律与右上相反即可
             else {
                 while (row < m && col >= 0) {
                     ans[index] = mat[row][col];
                     index++;
                     row++;
                     col--;
                 }
                 if (row < m) {
                     col++;

                 } else {
                     row--;
                     col += 2;
                 }
             }
         }
         // 返回存放数组
         return ans;
     }
};

leetcode里的数组的对角线遍历,改了个c++版本的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值