順時針打印矩陣

一、題目描述

輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字,例如,如果輸入如下4 X 4矩陣:
matrix=[12345678910111213141516] matrix= \left[ \begin{array}{ccc} 1 & 2 & 3 & 4\\ 5 & 6 & 7 & 8\\ 9 & 10 & 11 & 12\\ 13 & 14 & 15 & 16\\ \end{array} \right ]
則依次打印出數字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

題目來源:順時針打印矩陣

二、題目解析


#if 1
class Solution {
public:
    vector<int> printMatrix(vector<vector<int> > matrix) {
        /**
         * 其實感覺這道題很沒有意思的
         * 可是嘗試自己寫的時候,卻發現寫不出來
         * 着實有一點眼高手低了
         * 那麼再好好做一下吧,感覺這道題·考察的是邊界條件的控制,跟算法和數據結構沒有太大關係
         */
        std::vector<int> ret;
        // 如果數組爲空,直接返回吧
        if(matrix.empty() || matrix[0].empty())
        {
            return ret;
        }
        
        int rows = static_cast<int>(matrix.size());
        int cols = static_cast<int>(matrix[0].size());
        int left = 0;
        int right = cols - 1;
        int up = 0;
        int down = rows-1;
        
        while(left <= right && up <= down)
        {
            // 從左往右打印一行
            for(int i = left; i <= right; ++i)
            {
                ret.push_back(matrix[up][i]);
            }
            
            // 從上往下打印一列
            if (up < down)
            {
                for (int i = up + 1; i <= down; ++i)
                {
                    ret.push_back(matrix[i][right]);
                }
            }
            
            // 從右往左打印一行
            if (up < down && left < right)
            {
                for (int i = right - 1; i >= left; --i)
                {
                    ret.push_back(matrix[down][i]);
                }
            }
            
            // 從下往上打印一列
            if (up + 1 < down && left < right)
            {
                for (int i = down -1; i > up; --i)
                {
                    ret.push_back(matrix[i][left]);
                }
            }
            
            ++left, --right, ++up, --down;
        }
        
        return ret;
    }
};

#endif



如有不正或者有別的想法,還請評論區指出,互相幫助,共同進步,謝謝大家 😃

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章