輸入乙個矩陣,從外到裡以順時針順序依次列印思路:將其看作一圈一圈列印
開始:(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 個空間。
按照訪問順序返回表示網格位置的座標列表。
思路同上,但是加入了左邊界判斷
執行用時 : 84 ms, 在spiral matrix iii的c++提交中擊敗了98.51% 的使用者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;
}
記憶體消耗 : 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...