zoukankan      html  css  js  c++  java
  • 顺时针打印矩阵

    题目描述

      输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,

      例如,如果输入如下矩阵:

            1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

      则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

    算法思想

      先打印最上面一行,从左向右,
      然后判断是否有必要从上向下打印(如果数组只有一行的话这个if语句其实就不走了),
      接着判断是否有必要从右向左打印(至少两列,只有一列的时候走了前两个if之后就打印结束了),
      接着判断是否有必要从下到上打印(至少三行,只有两行的时候,走了前三个if打印就结束了).

    代码如下:

    import java.util.*;
    public class Solution {
        public ArrayList<Integer> printMatrix(int [][] matrix) {
            int startX = 0;
            int endX = matrix[0].length-1;
            int startY = 0;
            int endY = matrix.length -1;
            ArrayList<Integer> result = new ArrayList();
      
            while (startX <= endX && startY <= endY) {
     
                // 从左到右
                if(startX <= endX){
                    for (int i = startX; i <= endX; i++) {
                        result.add(matrix[startY][i]);
                    }
                }
                 
     
                // 从上往下,此处没有=号,至少两行时
     
                if (startY < endY) {
     
                    for (int i = startY + 1; i <= endY; i++) {
                         result.add(matrix[i][endX]);
                    }
                }
     
                // 从右往左,至少两行两列
                if (startX < endX && endY > startY) {
                    for (int i = endX - 1; i >= startX; i--) {
                        result.add(matrix[endY][i]);
                    }
                }
                 
                // 从下往上打印,至少三行两列
                if (startY < endY-1 && endX > startX) {
                    for (int i = endY - 1; i >= startY + 1; i--) {
                        result.add(matrix[i][startX]);
                    }
                }
     
                startX++;
                endX--;
                startY++;
                endY--;
            }
            return result;
            
           
        }
    }
  • 相关阅读:
    Twitter Storm安装配置(Ubuntu系统)单机版
    Ubuntu下安装配置JDK1.7
    JS性能优化
    JavaScript禁用页面刷新
    pomelo获取客户端IP
    MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)
    MySQL5.6忘记root密码(win平台)
    清空文件下的SVN控制文件
    Windows平台搭建NodeJs开发环境以及HelloWorld展示—图解
    Unity3D默认的快捷键
  • 原文地址:https://www.cnblogs.com/suixue/p/5825235.html
Copyright © 2011-2022 走看看