leetcode刷题22
j今天刷的题是LeetCode54题,题目要求是:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
这跟我上一道题很像,依然是while循环,加判断,具体地代码如下:
import java.util.ArrayList; import java.util.List; public class SpiralOrder_54_middle { public static void main(String[] args) { int[][] matrix={}; List<Integer> list=solution(matrix); for (int i = 0; i <list.size() ; i++) { System.out.print(list.get(i)+" "); } } public static List<Integer> solution(int[][] matrix){ List<Integer> result=new ArrayList<>(); int m=matrix.length; if (m==0) return result; int n=matrix[0].length;//m行,n列 boolean[][] flags=new boolean[m][n]; int point[]=isok(flags); int x=point[0]; int y=point[1]; while (x!=-1&&y!=-1){ result.add(matrix[x][y]); flags[x][y]=true; while (y+1<n&&flags[x][y+1]==false){ y=y+1; result.add(matrix[x][y]); flags[x][y]=true; } while (x+1<m&&flags[x+1][y]==false){ x=x+1; result.add(matrix[x][y]); flags[x][y]=true; } while (y-1>=0&&flags[x][y-1]==false){ y=y-1; result.add(matrix[x][y]); flags[x][y]=true; } while (x-1>=0&&flags[x-1][y]==false){ x=x-1; result.add(matrix[x][y]); flags[x][y]=true; } x=isok(flags)[0]; y=isok(flags)[1]; } return result; } public static int[] isok(boolean[][] flags){ //判断是不是所有的数据都输出完了 int[] result={-1,-1}; first:for (int i = 0; i <flags.length ; i++) { for (int j = 0; j <flags[i].length ; j++) { if (flags[i][j]==false){ result[0]=i; result[1]=j; break first; } } } return result; } }
提交中的第一次错误是在x+1<m的判断哪里,开始写的是n,这里不是方阵,行列不一样,因此mn分开
第二次错误是没考虑输入数组为空的情况,因此在得到行数哪里判断了一把