回型矩陣_牛客題霸_牛客網
描述
給你一個整數n,按要求輸出n∗n的回型矩陣輸入描述:
輸入一行,包含一個整數n
1<=n<=19
輸出描述:
輸出n行,每行包含n個正整數.示例1
輸入:輸出:4
1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
![]()
模拟(一)回型矩陣、螺旋矩陣回型矩陣_牛客題霸_牛客網螺旋矩陣_牛客題霸_牛客網劍指 Offer 29. 順時針列印矩陣 #include <iostream> using namespace std; #include<vector> int main() { int n; cin>>n; vector<vector<int>> arr(n, vector<int> (n)); int left = 0, right = n-1; int up = 0, down = n-1; int index = 1; while(index <= n*n) { for(int i = left; i <= right; i++) { arr[up][i] = index++; } up++; for(int i = up; i <= down; i++) { arr[i][right] = index++; } right--; for(int i = right; i >= left; i--) { arr[down][i] = index++; } down--; for(int i = down; i >= up; i--) { arr[i][left] = index++; } left++; } for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { cout<<arr[i][j]<<" "; } cout<<endl; } return 0; } // 64 位輸出請用 printf("%lld")
螺旋矩陣_牛客題霸_牛客網
給定一個m x n大小的矩陣(m行,n列),按螺旋的順序傳回矩陣中的所有元素。class Solution { public: vector<int> spiralOrder(vector<vector<int> > &matrix) { vector<int> res; if(matrix.empty()) return res; int left = 0, right = matrix[0].size()-1; int up = 0, down = matrix.size()-1; while(true) { // 左-->右 for(int i = left; i <= right; i++) res.push_back(matrix[up][i]); if(++up > down) break; // 上-->下 for(int i = up; i <= down; i++) res.push_back(matrix[i][right]); if(--right < left) break; // 右-->左 for(int i = right; i >= left; i--) res.push_back(matrix[down][i]); if(--down < up)break; // 下-->上 for(int i = down; i >= up; i--) res.push_back(matrix[i][left]); if(++left > right)break; } return res; } };
劍指 Offer 29. 順時針列印矩陣
輸入一個矩陣,按照從外向裡以順時針的順序依次列印出每一個數字。
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> res;
if(matrix.empty())return res;
int left = 0, right = matrix[0].size()-1;
int up = 0, down = matrix.size()-1;
while(1)
{
for(int i = left; i <= right; i++)
{
res.push_back(matrix[up][i]);
}
if(++up > down)break;
for(int i = up; i <= down; i++)
{
res.push_back(matrix[i][right]);
}
if(--right < left) break;
for(int i = right; i >= left; i--)
{
res.push_back(matrix[down][i]);
}
if(--down < up)break;
for(int i = down; i >= up; i--)
{
res.push_back(matrix[i][left]);
}
if(++left > right)break;
}
return res;
}
};