2016校招真题之二维数组打印

1、题目描述

有一个二维数组(n*n),写程序实现从右上角到左下角沿主对角线方向打印。给定一个二位数组arr及题目中的参数n,请返回结果数组。

测试样例:[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]],4
返回:[4,3,8,2,7,12,1,6,11,16,5,10,15,9,14,13]

2、代码实现

 1 package com.wcy.october;
 2 
 3 /**
 4  * 时间:2016年7月18日
 5  * 题目:二维数组打印
 6  * 题目描述:有一个二维数组(n*n),写程序实现从右上角到左下角沿主对角线方向打印。给定一个二位数组arr及题目中的参数n,请返回结果数组。
 7  * 测试样例:[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]],4
 8  * 返回:[4,3,8,2,7,12,1,6,11,16,5,10,15,9,14,13]
 9  */
10 public class Printer {
11 
12     /**
13      * 从右上角到左下角沿主对角线方向打印数组
14      * @param arr
15      * @param n
16      * @return
17      */
18     public int[] arrayPrint(int[][] arr, int n) {
19         int[] resultArray = new int[n*n];
20         int num = 0;
21         for (int i = n-1; i >= 0; i--) {
22             for (int j = 0; j < n-i; j++) {
23                 resultArray[num] = arr[j][i+j];
24                 resultArray[n*n-1-num] = arr[n-1-j][n-1-i-j];
25                 num++;
26             }
27         }
28         return resultArray;
29     }
30     
31     /**
32      * 打印数组函数
33      * @param arr 待打印的数组
34      */
35     public void showArray(int[] arr){
36         System.out.print("[");
37         for (int i = 0; i < arr.length; i++) {
38             if (i == arr.length-1) {
39                 System.out.print(arr[i]);
40             }else {
41                 System.out.print(arr[i] + ",");
42             }
43         }
44         System.out.println("]");
45     }
46     
47     /**
48      * 用户页面测试
49      * @param args
50      */
51     public static void main(String[] args) {
52         Printer test = new Printer();
53         int[][] arr = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
54         int[] resultArray = test.arrayPrint(arr, arr.length);
55         test.showArray(resultArray);
56     }
57     
58 }
原文地址:https://www.cnblogs.com/wangchaoyuan/p/5981710.html