刷题_剑指_顺时针打印矩阵

package offer;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
/**
 * 顺时针打印矩阵
 * 
 * @author zhaoz
 *
 */
public class _29_PrintMatrixClockWisely {
    static ArrayList<Integer> list = new ArrayList<Integer>();

    public static ArrayList<Integer> printMatrix(int [][] matrix) {
        int rows = matrix.length;
        int columns = matrix[0].length;
        int start = 0;
        while(rows > start*2 && columns > start*2){
            printMatrixInCircle(matrix, rows, columns, start);
            start++;
        }
        return list;
    }

    public static void printMatrixInCircle(int [][] matrix, int rows, int columns, int start){
        for(int i = start; i < columns - start; i++)
            list.add(matrix[start][i]);
        for(int j = start + 1; j < rows - start; j++)
            list.add(matrix[j][columns - start - 1]);
        for(int m = columns - start - 2; m >= start && rows - start - 1 > start; m--)
            list.add(matrix[rows - start - 1][m]);
        for(int n = rows - start - 2; n >= start + 1 && columns - start - 1 > start; n--)
            list.add(matrix[n][start]);
    }
/*
    public static void setMatrix(int n) { // 顺时针旋转打印方阵
        int[][] a = new int[n][n];
        int count = 1;
        int i, j;
        for (i = 0; i < n; i++) { // 初始化矩阵元素为0
            for (j = 0; j < n; j++)
                a[i][j] = 0;
        }
        for (i = 0; i < n / 2; i++) { // 只旋转n/2次
            for (j = i; j < n - i; j++) { // 向右
                if (a[i][j] == 0)
                    a[i][j] = count++;
            }
            for (j = i; j < n - i; j++) {// 向下
                if (a[j][n - i - 1] == 0)
                    a[j][n - i - 1] = count++;
            }
            for (j = n - i - 1; j > i; j--) {// 向左
                if (a[n - i - 1][j] == 0)
                    a[n - i - 1][j] = count++;
            }
            for (j = n - i - 1; j > i; j--) { // 向上
                if (a[j][i] == 0)
                    a[j][i] = count++;
            }
        }
        if (n % 2 == 1) // 当n为奇数时,有个正中心点
            a[n / 2][n / 2] = count;
        for (i = 0; i < n; i++) { // 输出矩阵
            for (j = 0; j < n; j++) {
                System.out.print(a[i][j] + "\t");
            }
            System.out.println();
        }
    }
*/
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入n的值:");
        int n = input.nextInt();
        int m =input.nextInt();
        int[][] a = new int[n][m];
        for (int i = 0; i < n; i++) { // 输出矩阵
            for (int j = 0; j < m; j++) 
                a[i][j] = input.nextInt();
        }
        printMatrix(a);
    }

}

 

posted @ 2017-08-28 15:09  55329  阅读(121)  评论(0编辑  收藏  举报