首页 > 试题广场 >

之字形打印矩阵

[编程题]之字形打印矩阵
  • 热度指数:26370 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

对于一个矩阵,请设计一个算法,将元素按“之”字形打印。具体见样例。

给定一个整数矩阵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;
 }
}


发表于 2020-05-12 10:52:25 回复(0)
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;
    }
}

发表于 2019-04-29 16:47:31 回复(0)
import java.util.Scanner;
public class Main {
    public static String delete(String a) {
        String d="";
        for(int i=0;i<a.length();i++) {
            if(a.charAt(i)!='['&&a.charAt(i)!=']') {
                d+=a.charAt(i);
            }
        }
        return d;
    }
    public static void main(String[] args) {
    Scanner in=new Scanner(System.in);
    while(in.hasNext()) {
    String s=in.next();
    String t=delete(s);
    int q=0;int w=0;int e=0;int r=0;int p=0;
    for(int i=t.length()-1;i>0;i--) {
        if(q==0) {
            if(t.charAt(i)==',') {
                w=Integer.parseInt(t.substring(i+1));
                q++;
                e=i;
            }
        }
        else {
            if(t.charAt(i)==',') {
                r=Integer.parseInt(t.substring(i+1, e));
                p=i;
                break;
            }
        }
    }
    String []arr=t.split(",");
    String [][]arrays=new String[r][w];
    int g=0;
    for(int i=0;i<r;i++) {
        for(int j=0;j<w;j++) {
            arrays[i][j]=arr[g];
            g++;
        }
    }
    String l="";
    for(int i=0;i<r;i++) {
            if((i+1)%2==1) {
                for(int j=0;j<w;j++) {
                    l+=arrays[i][j]+",";
                }
            }
            else{
                for(int j=w-1;j>=0;j--) {
                    l+=arrays[i][j]+",";
                }
            }
    }
    String k=l.substring(0, l.length()-1);
    System.out.println("["+k+"]");
    }
}
}
发表于 2019-03-02 10:24:36 回复(0)
import java.util.*;

public class Printer {
    public int[] printMatrix(int[][] mat, int n, int m) {
        int []print = new int [n*m];  int k = 0;  for(int i=0;i<n;i++){  for(int j=0;j<m;j++){  print[k++] = (i%2==0) ? mat[i][j] : mat[i][m-j-1];  }  }  return print;
    }
}

编辑于 2019-01-22 12:02:51 回复(0)
public class Printer {
    public int[] printMatrix(int[][] mat, int n, int m) {
        // write code here
        int size=m*n;
        int[]a = new int[size];
        int count = 0; 
        
        for(int i=0; i<n; i++){
            for(int j=0; j<m; j++){
                 if(i%2==0){
                   a[count]=mat[i][j];
                 }else{
                    a[count]=mat[i][m-1-j];
                 }
                    count++;
               }
           }
         return a;
    }
}
发表于 2018-12-14 11:14:57 回复(0)
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;
    }
}

编辑于 2018-07-04 17:02:36 回复(0)
        int[] nums = new int[n*m];
        int index=0;
        for(int i=0;i<n;i++) {
            if(i%2==0) {
                for(int j=0;j<m;j++) {
                    nums[index]=mat[i][j];//index=i+j
                    index=index+1;
                }
            }else {
                for(int j=m-1;j>=0;j--) {
                    nums[index]=mat[i][j];//index=???
                    index=index+1;
                }
            }
        }
        return nums;


发表于 2018-03-06 14:03:02 回复(0)
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;
    }
}

发表于 2018-02-23 00:13:04 回复(0)
看了大家的回答才发现自己的代码有些冗余,还要好好练习才行啊
import java.util.*;

public class Printer {
    public int[] printMatrix(int[][] mat, int n, int m) {
        // write code here
        int[] result = new int[m*n];
        int num=0;
        for(int i=0 ; i<n;i++){
            
              if(i%2 ==0){
                  for(int j=0;j<m;j++){
                     result[num] = mat[i][j];
                      num++;
                  }
              }
            else{
                for(int j=m-1;j>=0;j--){
                    result[num]=mat[i][j];
                    num++;
                }
            }
        }
        return result;
    }
}
发表于 2017-11-13 22:35:28 回复(0)
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;
    }
}

发表于 2017-03-17 15:53:15 回复(0)
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;
    }
}

发表于 2017-03-03 13:45:31 回复(0)
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;
	}
}

发表于 2016-10-18 09:39:57 回复(0)
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;
        
    }

发表于 2016-09-02 10:10:43 回复(0)
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;
    }
}

发表于 2016-07-14 22:22:29 回复(0)
         /**
	 * 数组反转
	 * @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;
	}

发表于 2016-06-22 08:25:44 回复(0)

问题信息

难度:
16条回答 39401浏览

热门推荐

通过挑战的用户

查看代码