对于一个矩阵,请设计一个算法,将元素按“之”字形打印。具体见样例。
给定一个整数矩阵mat,以及他的维数nxm,请返回一个数组,其中元素依次为打印的数字。
测试样例:
[[1,2,3],[4,5,6],[7,8,9],[10,11,12]],4,3
返回:[1,2,3,6,5,4,7,8,9,12,11,10]
import java.util.*;
public class Printer {
public int[] printMatrix(int[][] mat, int n, int m) {
int[] temp = new int[n*m];//用来存储最后输出数组数据
int cont = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
//下标加一用来判断逻辑上的奇偶行:1为奇数行,0为偶数行
if((i+1)%2!=0){
temp[cont] = mat[i][j];
cont++;
}else{
temp[cont] = mat[i][m-1-j];
cont++;
}
}
}
return temp;
}
} import java.util.*;
public class Printer {
public int[] printMatrix(int[][] mat, int n, int m) {
int[] result = new int[n*m];
//分开存储 如果为单数行,则从左向右储存;如果是双数行,则从右向左储存
int st = 0;
for(int i=0; i < n; i++)
{
if(i % 2 == 0)
{
for(int j=0; j < m; j++)
{
result[st] = mat[i][j];
st ++;
}
}
else
{
for(int j=m-1; j >= 0; j--)
{
result[st] = mat[i][j];
st ++;
}
}
}
return result;
}
}
import java.util.*;
public class Printer {
public int[] printMatrix(int[][] mat, int n, int m) {
// write code here
int[] arr = new int[n*m];//定义单行数组
int count = 0;
for(int i=0;i<n;i++){
if(i%2==0){
for(int j=0;j<m;j++ )
arr[count++]=mat[i][j];
}
else{
for(int j=m-1;j>=0;j-- )
arr[count++]=mat[i][j];
}
}
return arr;
}
}
import java.util.*;
public class Printer {
public int[] printMatrix(int[][] mat, int n, int m) {
int[] array=new int[n*m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(i%2==0){
array[i*m+j]=mat[i][j];
}else{
array[i*m+j]=mat[i][m-j-1];
}
}
}
return array;
}
}
import java.util.*;
public class Printer {
public int[] printMatrix(int[][] mat, int n, int m) {
int[] res=new int[n*m];
int i=0,j=0,step=1,k=0;
while(k<n*m){
res[k++]=mat[i][j];
if(k%m==0){
step=-step;
i++;
}
else
j+=step;
}
return res;
}
}
import java.util.*;
public class Printer {
public int[] printMatrix(int[][] mat, int n, int m) {
// write code here
int swap=0;
int[] res = new int[n*m];
int index=0;
for(int i=0;i<mat.length;i++){
if(i%2==1){//0,2,4...顺着打印,和以前一样不用管;1,3,5反着打印
for(int j=0;j<mat[0].length/2;j++){
swap=mat[i][j];
mat[i][j]=mat[i][mat[0].length-1-j];
mat[i][mat[0].length-1-j]=swap;
}
}
for(int k=0;k<mat[0].length;k++){
res[index]=mat[i][k];
index++;
}
}
return res;
}
}
import java.util.*;
public class Printer {
public int[] printMatrix(int[][] mat, int n, int m) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < mat.length; i ++ ) {
if(i % 2 == 0) for (int j = 0; j < m; j ++ )
list.add(mat[i][j]);
else for (int j = m - 1; j >= 0; j -- )
list.add(mat[i][j]);
}
int[] res = new int[n * m];
for (int i = 0; i < res.length; i ++ )
res[i] = list.get(i);
return res;
}
}
public int[] printMatrix(int[][] mat, int n, int m) {
List<Integer> list = new ArrayList<Integer>();
for(int i=0;i<n;i++){
if((i&0x1)==0){
for(int j=0;j<m;j++){
list.add(mat[i][j]);
}
}else{
for(int j=m-1;j>=0;j--){
list.add(mat[i][j]);
}
}
}
int[] a=new int[n*m];
for(int i=0;i<list.size();i++){
a[i]=list.get(i);
}
return a;
}
import java.util.*;
public class Printer {
public int[] printMatrix(int[][] mat, int n, int m) {
// write code here
int[] M = new int[n*m];
for(int i = 0 ;i < n; i++){
for(int j = 0; j< m; j ++){
if(i%2 ==0){
M[i*m +j] = mat[i][j];
}else{
M[i*m +j] = mat[i][m-1-j];
}
}
}
return M;
}
}
/**
* 数组反转
* @param a 待反转的数组
* @return 反转后的数组
*/
private static int[] reverseArray(int[] a) {
for (int i = 0; i < Math.floor(a.length / 2); i++) {
int temp = a[i];
a[i] = a[a.length - i - 1];
a[a.length - i - 1] = temp;
}
return a;
}
/**
* 将矩阵以之字形方式打印出来
* @param mat 待打印的矩阵
* @param m 矩阵的行数
* @param n 矩阵的列数
* @return 矩阵的之字形数组
*/
public static int[] printMatrix(int[][] mat, int m, int n) {
int[] a = new int[m * n];
for (int i = 0; i < m; i++) {
if (i % 2 == 0) {
System.arraycopy(mat[i], 0, a, i * n, n);
} else {
int[] b = reverseArray(mat[i]);
System.arraycopy(b, 0, a, i * n, n);
}
}
return a;
}