摘要:題目要求按照順時針方向旋轉(zhuǎn)訪問數(shù)組中的元素思路一按行遍歷,轉(zhuǎn)化為因為不允許跳躍插入,也就是說如果插入的大于的,就會報出。思路二利用順序插入為了避免類型轉(zhuǎn)化帶來的不必要的性能下降,最好直接利用順序插入,一次遍歷數(shù)組。
題目要求
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. For example, Given the following matrix: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] You should return [1,2,3,6,9,8,7,4,5].
按照順時針方向旋轉(zhuǎn)訪問數(shù)組中的元素
思路一:按行遍歷,array轉(zhuǎn)化為list因為List不允許跳躍插入,也就是說如果插入的index大于list的size,就會報出IndexOutOfBoundException。所以這里我打算采取int[]數(shù)組先存儲值,再用Arrays.asList轉(zhuǎn)化成list。
public ListspiralOrder(int[][] matrix) { int row = matrix.length; if(row == 0){ return new ArrayList (); } int column = matrix[0].length; Integer[] result = new Integer[row*column]; int prev = -1; int tempRow = row; int tempColumn = column; //按圈遍歷 for(int i = 0 ; tempRow>1&&tempColumn>1 ; i++){ //遍歷行 for(int j = 0 ; j 但是在這個方法中,先利用int[]在轉(zhuǎn)化成List相當影響效率,雖說只需要遍歷n/2個數(shù)組。
思路二:利用List順序插入為了避免類型轉(zhuǎn)化帶來的不必要的性能下降,最好直接利用List順序插入,一次遍歷int[][]數(shù)組。我們已知,除非特殊情況,每一圈必定都包含以下遍歷,順序的來說,就是從左往右遍歷,再從上往下遍歷,再從右往左遍歷,再從下往上遍歷。這時只需要從左往右遍歷的下標和從上往下的下標依次記錄了就行。
從左往右便利后,colBegin+1。從上往下遍歷后,rowEnd-1。這時需要判斷是否有往回遍歷的需要。從右往左遍歷后,colEnd-1。從下往上遍歷后,rowBegin+1。
代碼如下:public ListspiralOrder2(int[][] matrix) { List res = new ArrayList (); if (matrix.length == 0) { return res; } int rowBegin = 0; int rowEnd = matrix.length-1; int colBegin = 0; int colEnd = matrix[0].length - 1; while (rowBegin <= rowEnd && colBegin <= colEnd) { // Traverse Right for (int j = colBegin; j <= colEnd; j ++) { res.add(matrix[rowBegin][j]); } rowBegin++; // Traverse Down for (int j = rowBegin; j <= rowEnd; j ++) { res.add(matrix[j][colEnd]); } colEnd--; if (rowBegin <= rowEnd) { // Traverse Left for (int j = colEnd; j >= colBegin; j --) { res.add(matrix[rowEnd][j]); } } rowEnd--; if (colBegin <= colEnd) { // Traver Up for (int j = rowEnd; j >= rowBegin; j --) { res.add(matrix[j][colBegin]); } } colBegin ++; } return res; }
想要了解更多開發(fā)技術(shù),面試教程以及互聯(lián)網(wǎng)公司內(nèi)推,歡迎關(guān)注我的微信公眾號!將會不定期的發(fā)放福利哦~
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/70124.html
摘要:復雜度思路注意循環(huán)條件。代碼注意循環(huán)條件,要用而不是除以,因為精度準換問題只有一行或者一列的時候,就不要再繼續(xù)搜索了 LeetCode[54] Spiral Matrix Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. Fo...
摘要:螺旋矩陣給定一個包含個元素的矩陣行列,請按照順時針螺旋順序,返回矩陣中的所有元素。每次轉(zhuǎn)向或都會自減。循環(huán)可操作性很高,可以直接操作索引坐標改變遍歷方式,不再贅述。 54:Spiral Matrix 螺旋矩陣 Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix i...
摘要:螺旋矩陣給定一個包含個元素的矩陣行列,請按照順時針螺旋順序,返回矩陣中的所有元素。每次轉(zhuǎn)向或都會自減。循環(huán)可操作性很高,可以直接操作索引坐標改變遍歷方式,不再贅述。 54:Spiral Matrix 螺旋矩陣 Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix i...
摘要:題目要求也就是將遞加的數(shù)字按照順時針的順序依次填入數(shù)組之中這道題目聯(lián)系到,其實就相當好解決了。 題目要求 Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For example, Given n = 3, You should return...
摘要:代碼添加該圈第一行添加最后一列添加最后一行添加第一列如果是奇數(shù),加上中間那個點后續(xù)如果在中,給出的是和來代表行數(shù)和列數(shù),該如何解決和的本質(zhì)區(qū)別就是一個是任意長方形,一個是正方形,所以中不需要判斷最后一行或者最后一列。 Spiral Matrix I Given a matrix of m x n elements (m rows, n columns), return all ele...
閱讀 2805·2023-04-26 01:00
閱讀 745·2021-10-11 10:59
閱讀 2973·2019-08-30 11:18
閱讀 2666·2019-08-29 11:18
閱讀 1017·2019-08-28 18:28
閱讀 3009·2019-08-26 18:36
閱讀 2131·2019-08-23 18:16
閱讀 1065·2019-08-23 15:56