首页 > 编程知识 正文

什么是遍历规律,公务员考试遍历规律

时间:2023-05-03 19:08:10 阅读:276823 作者:3874

一、LeetCode 498 对角线遍历
题目描述:
给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。
思路:
参考题解

代码如下:

class Solution {public: vector<int> findDiagonalOrder(vector<vector<int>>& matrix) { if(matrix.empty()) return {}; vector<int>res; int m=matrix.size(); int n=matrix[0].size(); int i=0; while(i<m+n){ //第1,3,5.....趟 int x1=i<m?i:m-1; int y1=i-x1; while(x1>=0&&y1<n){ res.push_back(matrix[x1][y1]); x1--; y1++; } i++; if(i>=m+n) break; //第2,4,6.....趟 int y2=i<n?i:n-1; int x2=i-y2; while(x2<m&&y2>=0){ res.push_back(matrix[x2][y2]); x2++; y2--; } i++; } return res; }};

二、LeetCode 1424 对角线遍历II
题目描述:
给你一个列表 nums ,里面每一个元素都是一个整数列表。请你依照下面各图的规则,按顺序返回 nums 中对角线上的整数。
思路:
利用map存储每个对角线上的所有的值
然后再遍历这个map

代码如下:

class Solution {public: vector<int> findDiagonalOrder(vector<vector<int>>& nums) { map<int,vector<int>>mp; vector<int>res; for(int i=0;i<nums.size();i++){ for(int j=0;j<nums[i].size();j++){ mp[i+j].push_back(nums[i][j]); } } for(int i=0;i<mp.size();i++){ for(int j=mp[i].size()-1;j>=0;j--){ res.push_back(mp[i][j]); } } return res; }};

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。