zoukankan      html  css  js  c++  java
  • 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分开

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

  • 相关阅读:
    删除lv
    nohop以及后台运行的相关集合
    linux 上安装pstree
    python中的异常
    ansible批量验证密码
    Linux显示不了中文
    zabbix修改和查看登录密码
    chkconfig --add失败的处理方法
    vivado2016.2下系统自带DDR3 ip例程仿真运行
    分享我们必须知道的高速GTX技术
  • 原文地址:https://www.cnblogs.com/cquer-xjtuer-lys/p/11481432.html
Copyright © 2011-2022 走看看