class Solution {
public:
    vector<int> printMatrix(vector<vector<int>> matrix) {
        int n = matrix.size();
        int m = matrix[0].size();
        vector<int> vec;
        if (!n||!m) return vec;
        int l = 0, r = m-1, u = 0, d = n-1;
        while (l<r && u<d) {
            for (int k=l; k<r; k++){
                vec.push_back(matrix[u][k]);
            }
            for (int k=u; k<d; k++){
                vec.push_back(matrix[k][r]);
            }
            for (int k=r; k>l; k--){
                vec.push_back(matrix[d][k]);
            }
            for (int k=d; k>u; k--){
                vec.push_back(matrix[k][l]);
            }
            l++; r--; u++; d--;
        }
        if (l==r) {
            for (int k=u; k<=d; k++){
                vec.push_back(matrix[k][r]);
            }
        }
        else if (u==d) {
            for (int k=l; k<=r; k++){
                vec.push_back(matrix[u][k]);
            }
        }
        return vec;
    }
};

这题要注意顺时针旋转的时候每个方向要留最后一位不能和下一个方向的第一个重复所以用 < 或 > 。

最后剩余一行或一列要全部打印所以是 <=。