面試題29 順時針列印矩陣

2021-09-23 17:06:35 字數 2079 閱讀 9696

輸入乙個矩陣,從外到裡以順時針順序依次列印

思路:將其看作一圈一圈列印

開始:(start, start)座標,(0, 0), (1, 1),(2,2)…

終止列印一圈的條件:cols>startx2, rows>starty2

如何列印一圈?

從左到右:總需要

從上到下:起始行號》終止行號

從右到左:圈內至少兩行兩列

從下到上:至少三行兩列

void printmatrixclockwisely(int **numbers, int columns, int rows)

}void printmatixincircle(int **numbers,int columns, int rows, int start)

//從上到下

if(start < endy) }

//從右到左

if(endx - start >=1 && endy-start >=1) }

//從下到上

if(start=start; i--)}}

螺旋矩陣

給定乙個包含 m x n 個元素的矩陣(m 行, n 列),請按照順時針螺旋順序,返回矩陣中的所有元素。

vectorspiralorder(vector>& matrix) 

}if(startstart; i--)

}start ++;

}return res;

}

執行用時 : 4 ms, 在spiral matrix的c++提交中擊敗了97.17% 的使用者

記憶體消耗 : 8.8 mb, 在spiral matrix的c++提交中擊敗了17.53% 的使用者

給定乙個正整數 n,生成乙個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。

思路同上

vector> generatematrix(int n) 

if(start < endy)

}if(start=start; i--)

}if(startstart; i--)

}start ++;

}return res;

}

執行用時 : 8 ms, 在spiral matrix ii的c++提交中擊敗了95.63% 的使用者

記憶體消耗 : 9 mb, 在spiral matrix ii的c++提交中擊敗了50.19% 的使用者

螺旋矩陣 iii

在 r 行 c 列的矩陣上,我們從 (r0, c0) 面朝東面開始

這裡,網格的西北角位於第一行第一列,網格的東南角位於最後一行最後一列。

現在,我們以順時針按螺旋狀行走,訪問此網格中的每個位置。

每當我們移動到網格的邊界之外時,我們會繼續在網格之外行走(但稍後可能會返回到網格邊界)。

最終,我們到過網格的所有 r * c 個空間。

按照訪問順序返回表示網格位置的座標列表。

思路同上,但是加入了左邊界判斷

bool legposition(int r, int c, int r0, int c0)

vector> spiralmatrixiii(int r, int c, int r0, int c0)

}if(starty=leftx ;i--)}}

if(leftxlefty; i--)}}

circle ++;

startx --;

starty --;

}return res;

}

執行用時 : 84 ms, 在spiral matrix iii的c++提交中擊敗了98.51% 的使用者

記憶體消耗 : 13.8 mb, 在spiral matrix iii的c++提交中擊敗了71.88% 的使用者

面試題29 順時針列印矩陣

輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。這裡沒有涉及複雜的資料結構或者演算法,但是需要寫多個迴圈,需要判斷多個邊界條件。需要注意的是,最後一圈可能退化成只有一行 只有一列,甚至只有乙個數字。分析一圈 第一步總是需要的,因為至少有一步。如果只有一行,就不需要第二步了。需要第二步的...

面試題29 順時針列印矩陣

題目描述 輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。示例 1 輸入 matrix 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 示例 2 輸入 matrix 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12,11...

面試題29 順時針列印矩陣

輸入乙個矩陣,按照從外向裡以順時針的順序依次列印出每乙個數字。示例 1 輸入 matrix 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 示例 2 輸入 matrix 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12,11,10,9...