leetcode 54. Spiral Matrix | 54. 螺旋矩阵(Java)

ゝ一世哀愁。 2022-10-13 12:57 276阅读 0赞

题目

https://leetcode.com/problems/spiral-matrix/
在这里插入图片描述

题解

类似于状态机的思路,设定一个 padding,走一圈之后,padding+1 。用 长宽 - padding 确定边界,一旦到达边界,则改变方向。用 count 记录已经走过的格子数量,当走过格子数量=所有格子之后,算法结束。

  1. class Solution {
  2. public List<Integer> spiralOrder(int[][] matrix) {
  3. List<Integer> list = new ArrayList<>();
  4. int count = 0;
  5. int y = matrix.length;
  6. int x = matrix[0].length;
  7. int i = 0;
  8. int j = 0;
  9. int padding = 0;
  10. int direct = 0;// 0=right 1=down 2=left 3=up
  11. while (count < y * x) {
  12. list.add(matrix[i][j]);
  13. count++;
  14. switch (direct) {
  15. case 0 -> {
  16. if (j < x - padding - 1) {
  17. j++;
  18. } else {
  19. direct = 1;
  20. i++;
  21. }
  22. }
  23. case 1 -> {
  24. if (i < y - padding - 1) {
  25. i++;
  26. } else {
  27. direct = 2;
  28. j--;
  29. }
  30. }
  31. case 2 -> {
  32. if (j > padding) {
  33. j--;
  34. } else {
  35. direct = 3;
  36. i--;
  37. }
  38. }
  39. case 3 -> {
  40. if (i > padding + 1) {
  41. i--;
  42. } else {
  43. direct = 0;
  44. padding++;
  45. j++;
  46. }
  47. }
  48. }
  49. }
  50. return list;
  51. }
  52. }

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,276人围观)

还没有评论,来说两句吧...

相关阅读