給定乙個包含 m x n 個元素的矩陣(m 行, n 列),請按照順時針螺旋順序,返回矩陣中的所有元素。
示例 1:
輸入:[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]輸出: [1,2,3,6,9,8,7,4,5]
示例 2:
輸入:[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]輸出: [1,2,3,4,8,12,11,10,9,5,6,7]
外一層,裡一層的遞迴插入要返回的向量中。
執行遞迴插入操作的函式是void insert_to_vec(vector>& matrix, int left_top_row, int left_top_col, int right_bottom_row, int right_bottom_col)
,
它包含5個引數:
1. 矩陣
2. 左上角的行
3. 左上角的列
4. 右下角的行
5. 右下角的列
left_top_row > right_bottom_row || left_top_col > right_bottom_col
是遞迴的中止條件,
left_top_row == right_bottom_row
和left_top_col == right_bottom_col
是特殊邊界,
整個插入按照左上到右上,右上到右下,右下到左下,左下到左上的流程走完,
然後進行裡一層的插入,即呼叫insert_to_vec(matrix, left_top_row+1, left_top_col+1, right_bottom_row-1, right_bottom_col-1);
.
class solution
insert_to_vec(matrix, 0, 0, row-1, col-1);
return ansvec;
}void insert_to_vec(vector>& matrix, int left_top_row, int left_top_col, int right_bottom_row, int right_bottom_col)
if (left_top_col == right_bottom_col)
for(int i = left_top_col; i <= right_bottom_col; i++)
ansvec.push_back(matrix[left_top_row][i]);
for(int i = left_top_row + 1; i <= right_bottom_row; i++)
ansvec.push_back(matrix[i][right_bottom_col]);
for(int i = right_bottom_col - 1; i >= left_top_col; i--)
ansvec.push_back(matrix[right_bottom_row][i]);
for(int i = right_bottom_row - 1; i > left_top_row; i--)
ansvec.push_back(matrix[i][left_top_col]);
insert_to_vec(matrix, left_top_row+1, left_top_col+1, right_bottom_row-1, right_bottom_col-1);
}};
54 螺旋矩陣
給定乙個包含 m x n 個元素的矩陣 m 行,n 列 請按照順時針螺旋順序,返回矩陣中的所有元素。示例 1 輸入 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 示例 2 輸入 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12,11...
54 螺旋矩陣
給定乙個包含 m x n 個元素的矩陣 m 行,n 列 請按照順時針螺旋順序,返回矩陣中的所有元素。輸入 1,2,3 4,5,6 7,8,9 輸出 1 2,3 6,9 8,7 4,5 輸入 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1 2,3 4,8 12,11 10,9 5,6 ...
54 螺旋矩陣
題目描述 給定乙個包含 m x n 個元素的矩陣 m 行,n 列 請按照順時針螺旋順序,返回矩陣中的所有元素。示例 1 輸入 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 示例2 輸入 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,1...