vector<int> findDiagonalOrder(vector<vector<int>>& matrix){ vector<int> res; int m = matrix.size(); if (m == 0) return res; int n = matrix[0].size();
int i = 0,j = 0; int state = 0; int nextI[2] = {-1, 1}; int nextJ[2] = {1, -1};
auto right = [n](int &j) { bool res = j + 1 < n; j += res; return res; }; auto down = [m](int &i) { bool res = i + 1 < m; i += res; return res; };
for(int t = 0, size = m * n; t < size; t++) { res.push_back(matrix[i][j]); i += nextI[state]; j += nextJ[state]; if (i < 0 || j < 0 || i == m || j == n) { i -= nextI[state]; j -= nextJ[state];