华为机试题---二维数组的转置

来源:互联网 发布:淘宝部分退款返利 编辑:程序博客网 时间:2024/05/16 08:44

一、问题描述

 * 二维数组转置 例:

1 2 3

 4 5 6

 转置
 *  1 4 
 *  2 5
 *  3 6


二、算法分析

解决两个问题: 1. 如何初始化新的数据,如何获得转置后二维数组的行数;

                              2. 如何把原先数组的数据转移到新的数据中。

      

笔者是这么解决以上两个问题:

      1. 初始化一个Integer[]一维数组,用来存放每一行的数据。

       2.然后把integer数组存放到List中,由于list存放进去的次序不发生变化。那么List.get(0)[0] = arry[0][0]

       3.根据list中存放integer数组的长度来初始化新的数据行数和列数。

        4. 把list中的数据转移到新的数据中。

三、具体算法

/** * Gets reversed matrix * @param a * @return */public int[][] reverseArray(int[][] a) {Integer[] rowCell = null;List<Integer[]> cellList = new ArrayList<Integer[]>();for (int i = 0; i < a.length; i++) {rowCell = new Integer[a[i].length];for (int j = 0; j < a[i].length; j++) {rowCell[j] = a[i][j];}cellList.add(rowCell);}int[][] result = new int[cellList.get(0).length][a.length];for (int i = 0; i < result.length; i++) {for (int j = 0; j < result[i].length; j++) {result[i][j] = cellList.get(j)[i];}}return result;}
四、测试类:

package com.albertshao.csi.interview;import java.util.ArrayList;import java.util.List;/** * @author albertshao *  */public class Main26 {/** * @param args */public static void main(String[] args) {Main26 m = new Main26();int[][] a = {{ 1, 2, 3 }, { 4, 5, 6 },{7,8,9} };int[][] result = m.reverseArray(a);m.print(result);}/** * Gets reversed matrix * @param a * @return */public int[][] reverseArray(int[][] a) {Integer[] rowCell = null;List<Integer[]> cellList = new ArrayList<Integer[]>();for (int i = 0; i < a.length; i++) {rowCell = new Integer[a[i].length];for (int j = 0; j < a[i].length; j++) {rowCell[j] = a[i][j];}cellList.add(rowCell);}int[][] result = new int[cellList.get(0).length][a.length];for (int i = 0; i < result.length; i++) {for (int j = 0; j < result[i].length; j++) {result[i][j] = cellList.get(j)[i];}}return result;}public void print(int[][] result) {for (int i[] : result) {for (int e: i) {System.out.print(e + " ");}System.out.println();}}/** * 实现二维数组的转置 * @author HAN * */final static double PI=3.1415;public static void vast() {/*****定义要用于转置的二维数组*******/int arr2D[][]={{1,2,3},{4,5,6},{7,8,9}};/*****构造结果新二维数组用于存放转置结果*******//*定义结果数组变量,注意 一定要先开辟一个内存,否则只是地址传递,也就是说两个数组名实际上指向的是同一块内存*///而构造二维数组可以为维度来进行,不一定是一个矩阵,即每一行的长度不一定相同int result_arr[][]=new int[arr2D.length][];//先实现第一维for(int i=0 ; i<arr2D.length;i++){ //再实现第二维result_arr[i]=new int[arr2D[i].length];}/*****输出用于转置的二维数组*******/for (int x[]:arr2D){        for(int e:x){        System.out.print(e+" ");        }        System.out.println();        }System.out.println();        /*******进行元素倒置******/        for(int i=0 ; i<arr2D.length;i++){        for(int j=0; j<arr2D[i].length;j++){        result_arr[j][i]=arr2D[i][j]; //转置核心        }        }                /*****show the result in the result matrix*******/        for (int x[]:result_arr){        for(int e:x){        System.out.print(e+" ");        }        System.out.println();        }        }}

运行结果:

1 4 7 2 5 8 3 6 9 


0 0
原创粉丝点击