一、題目描述
輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字,例如,如果輸入如下4 X 4矩陣:
則依次打印出數字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
如有不正或者有別的想法,還請評論區指出,互相幫助,共同進步,謝謝大家 😃