leetcode-华为专题-498. 对角线遍历
此题属于固定题,没法扩展。
class Solution { public: vector<int> findDiagonalOrder(vector<vector<int>>& mat) { int m = mat.size(); if (m == 0) return {}; int n = mat[0].size(); vector<int> res(m * n); int cnt = 0; for (int s = 0; s <= m + n - 2; s++) { if (s % 2 == 1) { // 奇数行,从上到下。 // i的值没超过对角线就是第一行0,超过对角线就是s-n+1 // 没超过对角线直线,i的最大值就是s,超过以后,i的值就是最后一列m-1; for (int i = max(0, s - n + 1); i <= min(m - 1, s); i++) res[cnt++] = mat[i][s - i]; } else { for (int i = min(m - 1, s); i >= max(0, s - n + 1); i--) res[cnt++] = mat[i][s - i]; } } return res; } };