常考数据结构与算法:螺旋矩阵m*n
生活随笔
收集整理的這篇文章主要介紹了
常考数据结构与算法:螺旋矩阵m*n
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目描述
給定一個m x n大小的矩陣(m行,n列),按螺旋的順序返回矩陣中的所有元素。
?
解題思路:
使用計算輸出的方法,先處理上面一行,再處理右面一列,再處理下面一行,再處理左邊一列,這是一個處理流程,一直這樣操作,直到所有的元素都處理完成。
?
示例:
輸入
[[1,2,3],[4,5,6],[7,8,9]]返回值
[1,2,3,6,9,8,7,4,5] import java.util.ArrayList;public class SpiralOrderMe {public static void main(String[] args) {int[][] arr = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};SpiralOrderMe spiralOrderMe = new SpiralOrderMe();spiralOrderMe.spiralOrder2(arr);}/** {1, 2, 3, 4},* {5, 6, 7, 8},* {9,10,11,12}*/public ArrayList<Integer> spiralOrder2(int[][] matrix) {ArrayList<Integer> result = new ArrayList<>(50);if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {return result;}// 只有一行的情況if (matrix.length == 1) {for (int i : matrix[0]) {result.add(i);}return result;}if (matrix[0].length == 1) {for (int i = 0; i < matrix.length; i++) {result.add(matrix[i][0]);}return result;}// 計算有多少圈int row = matrix.length;int col = matrix[0].length;int cycle = row < col ? row : col;cycle = (cycle + 1) / 2;int round = 0;int left = 0;int right = matrix[0].length - 1;int top = 0;int down = matrix.length - 1;// 總元素個數(shù)int total = col * row;int count = 0;while (round < cycle) {// 上面一行for (int i = left; i <= right && count < total; i++) {count++;result.add(matrix[round][i]);}top++;// 右邊一列for (int i = top; i <= down && count < total; i++) {count++;result.add(matrix[i][col - round - 1]);}right--;// 底下一行for (int i = right; i >= left && count < total; i--) {count++;result.add(matrix[row - round - 1][i]);}down--;// 左邊一列for (int i = down; i >= top && count < total; i--) {count++;result.add(matrix[i][round]);}left++;round++;}return result;}}?
總結(jié)
以上是生活随笔為你收集整理的常考数据结构与算法:螺旋矩阵m*n的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用户态,内核态
- 下一篇: 常考数据结构与算法:反转字符串