一、问题描述
二维数组转置
例:1 2 3
4 5 6
转置
1 4
2 5
3 6
二、算法
/**
* 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();
}
}
}
测试结果:
1 4 7
2 5 8
3 6 9
看点: 二位数组心得遍历方法和lis存数组