圖片.png

    1. public static void main(String[] args) {
    2. int [][] nums=new int[][]{{ 1,2,3}, { 4,5,6}, {7,8,9}};
    3. ArrayList<Integer> results = (ArrayList<Integer>) spiralOrder(nums);
    4. System.out.println("输入为:"+Arrays.deepToString(nums));
    5. System.out.print("输出为:"); System.out.println(results);
    6. }
    7. public static List<Integer> spiralOrder(int[][] numlist) {
    8. List<Integer> list = new ArrayList<>();
    9. if (numlist == null || numlist.length == 0 || numlist[0].length == 0)
    10. return list;
    11. int rowMin = 0, rowMax = numlist.length - 1, colMin = 0, colMax = numlist[0].length - 1;
    12. //顺时针:从左到右,从上到下,从右到左,从下到上
    13. while (rowMin <= rowMax && colMin <= colMax) {
    14. /*遍历第一行,行不动,列加1
    15. * 遍历结果1->2->3
    16. */
    17. for (int i = colMin; i <= colMax; i++)
    18. list.add(numlist[rowMin][i]);
    19. rowMin++;
    20. /*遍历最后一列colMax,列不动,行加1
    21. * 遍历结果3->6->9
    22. */
    23. for (int i = rowMin; i <= rowMax; i++)
    24. list.add(numlist[i][colMax]);
    25. colMax--;
    26. if (rowMin > rowMax || colMin > colMax)
    27. break;
    28. /*遍历最后一行rowMax,行不动,列减1
    29. * 遍历结果9->8->7
    30. */
    31. for (int i = colMax; i >= colMin; i--)
    32. list.add(numlist[rowMax][i]);
    33. rowMax--;
    34. /*遍历第一列colMin,列不动,行减1
    35. * ......
    36. */
    37. for (int i = rowMax; i >= rowMin; i--)
    38. list.add(numlist[i][colMin]);
    39. colMin++;
    40. }
    41. return list;
    42. }