#include using namespace std; class Solution { public: vector findDiagonalOrder(vector>& m) { int x=0,y=0; bool isup=true; vector res; res.reserve(m.size()); #define isout (x<0||x>m.size()||y<0||y>m[0].size()) do{ res.push_back(m[x][y]); if(isup){ if(x==0){ ++y; isup=false; }else{ --x; ++y; } }else{ if(y==0){ ++x; isup=true; }else{ ++x; --y; } } }while(!(x==m.size()&&y==m[0].size())); return res; } }; int main(){ Solution s; s.findDiagonalOrder({{1,2,3},{4,5,6},{7,8,9}}); }