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 }