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分开

第二次错误是没考虑输入数组为空的情况,因此在得到行数哪里判断了一把

 

posted @ 2019-09-07 16:12  刘云生  阅读(155)  评论(0编辑  收藏  举报