Posted onEdited onInLeetCodeDisqus: Symbols count in article: 2.1kReading time ≈2 mins.
O(mn)↗↙ 0 <= sum < m + n - 1 0 <= r < n 0 <= c < m sum = r + c 0 <= r = sum - c < n即sum - n < c <= sum 0 <= c = sum - r < m即sum - m < r <= sum 所以 max(0, sum - m + 1) <= r <= min(n - 1, sum) // max(0, sum - n + 1) <= c <= min(m - 1, sum)
classSolution { public: vector<int> findDiagonalOrder(vector<vector<int>>& matrix){ if (matrix.empty() || matrix[0].empty()) return {}; int n = matrix.size(), m = matrix[0].size(); vector<int> res; int size = m + n - 1; for (int sum = 0; sum < size; ++sum) { if (sum & 1) { for (int r = max(0, sum - m + 1); r <= min(n - 1, sum); ++r) { res.push_back(matrix[r][sum - r]); } } else { for (int c = max(0, sum - n + 1); c <= min(m - 1, sum); ++c) { res.push_back(matrix[sum - c][c]); } } } return res; } };