c++
并没有找到特别的规律,考察的是用vector 操作数组的知识。

1--首先想到暴力法:
笨办法,标记输出。

class Solution {
public:
    vector<int> printmat(vector<vector<int> > matrix, int lx, int rx, int ly, int ry, vector<int> ans){
        if (lx == rx) {
            for(int i=ly; i<=ry; i++)
                ans.push_back(matrix[lx][i]);
            return ans;
        }
        if(ly == ry){
             for(int i=lx; i<=rx; i++)
                ans.push_back(matrix[i][ly]);
            return ans;
        }
        for(int i=ly; i<=ry; i++){
            ans.push_back(matrix[lx][i]);
        }
        for(int i=lx+1; i<=rx; i++){
            ans.push_back(matrix[i][ry]);
        }

        for(int i=ry-1; i>=ly; i--){
              ans.push_back(matrix[rx][i]);
        }

        for(int i=rx-1; i>=lx+1; i--){
              ans.push_back(matrix[i][ly]);
        }
        return ans;
    }


    vector<int> printMatrix(vector<vector<int> > matrix) {
        vector<int> ans;
        if(matrix.empty()) return ans;
        int lx = 0, rx = matrix.size()-1;
        int ly = 0, ry = matrix[0].size()-1;
        while(lx<=rx && ly<=ry){
            ans  =  printmat(matrix, lx, rx, ly, ry, ans); 
            lx++;
            rx--;
            ly++;
            ry--;
        }
        return ans;
    }
};

这个是抄别人的,感觉这个思路很low,而且边界情况不太好区分。

方法2实时修改举着,太费事时,且消耗大量操作。
未调通

class Solution {
public:
    void printmat(vector<vector<int> > matrix,  vector<int> ans){
        // 行向量
        if (matrix.size() == 1) {
            for(int i=0; i<matrix[0].size(); i++) 
                ans.push_back(matrix[0][i]);
            matrix.clear();
        //列向量
        }else if(matrix[0].size() == 1){
            for(int i=0; i<matrix.size(); i++) 
                ans.push_back(matrix[i][0]);
            matrix.clear();
        //二维矩阵
        }else{
            int i=0;
            int j=0;
            while(j < matrix[0].size()){
                ans.push_back(matrix[i][j]);
                j++;
            }
            matrix[0].clear();

            i = 0;
            j = matrix[0].size()-1;
            while(i < matrix.size()){
                ans.push_back(matrix[i][j-1]);
                matrix[i].pop_back();
                i++;
            }

            i = matrix.size()-1;
            j = matrix[0].size()-1;
            while(j>=0){
                ans.push_back(matrix[i][j]);
                j--;
            }
            matrix[i].clear();

            i= matrix.size() -1;
            j=0;
            while( i>=0 ){
                ans.push_back(matrix[i][j]);
                matrix[i].erase(matrix[i].begin(), matrix[i].begin()+1);
                i--;
            }
        }  
    }

    vector<int> printMatrix(vector<vector<int> > matrix) {
        vector<int> ans;
        if(matrix.empty()) return ans;
        while(!matrix.empty()){
            printmat(matrix, ans); 
        }
        return ans;
    }
};

回头再调。