#include <vector>
class Printer {
  public:
    vector<int> clockwisePrint(vector<vector<int> > mat, int n, int m) {
        int r = m - 1; //右边界
        int d = n - 1; //下边界
        int l = 0;     //左边界
        int u = 0;     //上边界
        int i;         //游标 从左上角开始
        vector<int> res; //结果集 
        for (; r >= l && d >= u;) {
            //右行一行
            for (i = l; r >= l && d >= u && i <= r; res.push_back(mat[u][i]), i++);
            u++; //上界向下收一行
            //下行一列
            for (i = u; r >= l && d >= u && i <= d; res.push_back(mat[i][r]), i++);
            r--; //右界向左收一列
            //左行一行
            for (i = r; r >= l && d >= u && i >= l; res.push_back(mat[d][i]), i--);
            d--; //下界向上收一行
            //上行一列
            for (i = d; r >= l && d >= u && i >= u; res.push_back(mat[i][l]), i--);
            l++; //左界向右收一列
        }
        return res;
    }
};

逻辑对称自洽,如饮美酒,当然而然。